python echo命令_如何用Python调用外部命令

解决方法

方法1:我们可以使用subprocess,比如要执行 ls -l 命令

import subprocess

subprocess.run("ls", "-l")

Python3.5 之前的版本,需要使用 call

import subprocess

subprocess.call(["ls", "-l"])

方法2:

import os

os.system("ls -l")

os.popen("ls -l").read()

方法讨论:

问题解决了,那么os.system 和 subprocess哪个解决方法更好呢?这里做简单讨论,虽然os.system 和 subprocess 都能完成外部命令功能,但是subprocess比system更加灵活(subprocess 我们可以得到 stdout,stderr 以及更好的错误处理等等)。并且官方文档也是更建议subprocess模块。

总觉:

1、os.system("some_command with args"):将命令和参数传给系统shell,这个方法可以一次执行多条命令,并且可以建立管道重定向。

os.system("some_command < input_file | another_command > output_file ")

尽管这种方式很简便,但是你不得不手工处理一些特殊字符例如空格等。

2、stream = os.popen("some_command with args"):实现功能和os.system是一样的,但是os.popen会返回一个类文件对象,让你看到命令的执行结果。

stream = os.popen("ls -l")

stream.read()

3、subprocess 的 Popen 类,建议尽量使用它来替代os.popen,但是使用的时参数会相对复杂

print(subprocess.Popen("echo Hello Worldd", shell=True, stdout=subprocess.PIPE).stdout.read())

而不建议使用

print(os.popen("echo Hello World")).read()

4、subprocess 模块中 call 函数,功能和Popen类相似,并且使用相同的参数,但是它仅仅在命令执行完毕后,返回一个代码

return_code = subprocess.call("echo Hello World", shell=True)

0 # 执行成功

5、如果使用时Python3.5及以上版本,可以使用subprocess.run函数,它跟上面介绍的函数基本一样,但是更加灵活,会在命令执行结束后返回一个CompletedProcess对象。

return_code = subprocess.run("echo Hello World", shell=True)

print return_code

>>> CompletedProcess(args='echo Hello World', return_code=0)

6、虽然os模块包括fork/exec/spawn等函数,但是并不建议直接使用它们,使用不当会导致意外的结果。

因此如果有需要执行的外部命令的需要,建议使用 subprocess,而非os模块。

最后,特别要注意如果你要执行的命令是以字符串的形式作为参数,那么必须小心谨慎,否则会造成严重的后果!

例如:

print(subprocess.Popen("echo %s" % user_input, stdout=PIPE).stdout.read())

看到这段代码能想到什么可怕的事情吗?如果有人给 user_input 传递的是“my mama didnt love me && rm -rf /”,是不是头皮发麻!所以谨慎再谨慎!尽量不做交互是输入,而是在程序中将要执行的命令,写‘死’在字符串中,作为常量传递。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504799.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vba php,VBA

【行业前景】很多时候&#xff0c;当我们提起VBA&#xff0c;就想到和Excel有关&#xff0c;其实这里所提到的VBA是依附在Excel平台上进行的二次开发&#xff0c;当然它还可以大量应用在其他的软件中&#xff0c;可用VBA进行二次开发。对于我们最常使用的Excel&#xff0c;VBA可…

ios 捕抓crash_ios crash的原因与抓取crash日志的方法

首先我们经常会闪退的异常有哪些呢&#xff1f;crash的产生来源于两种问题&#xff1a;违反iOS策略被干掉&#xff0c;以及自身的代码bug。1.IOS策略1.1低内存闪退前面提到大多数crash日志都包含着执行线程的栈调用信息&#xff0c;但是低内存闪退日志除外&#xff0c;这里就先…

php 多线程上传,PHP CURL 多线程操作代码实例

/** Curl 多线程类* 使用方法&#xff1a;* $urls array("http://baidu.com", "http://dzone.com", "http://google.com");$mp new MultiHttpRequest($urls);$mp->start();* */class MultiHttpRequest {public $urls array();public $curl…

jlabel 不能连续两次set_为什么有时连续多次setState只有一次生效?

例如下面的代码&#xff0c;两次打印出的结果是相同的&#xff1a;componentDidMount() {this.setState({ index: this.state.index 1 }, () > {console.log(this.state.index);})this.setState({ index: this.state.index 1 }, () > {console.log(this.state.index);}…

java字符流实际上也是字节,[Java教程]Java字节流与字符流的区别

[Java教程]Java字节流与字符流的区别0 2017-05-22 12:00:42字节流与和字符流的使用非常相似&#xff0c;两者除了操作代码上的不同之外&#xff0c;是否还有其他的不同呢&#xff1f;实际上字节流在操作时本身不会用到缓冲区(内存)&#xff0c;是文件本身直接操作的&#xff0c…

redis主从集群搭建eclipse_【Redis】Redis 主从模式搭建

主从模式介绍Redis虽然读取写入的速度都特别快&#xff0c;但是也会产生读压力特别大的情况。为了分担读压力&#xff0c;Redis支持主从复制&#xff0c;Redis的主从结构可以采用一主多从或者级联结构&#xff0c;Redis主从复制可以根据是否是全量分为全量同步和增量同步。下图…

unicode编码 php,PHP 的 UNICODE 编码和解码

方法一:function unicode_encode($name){$name iconv(UTF-8, UCS-2, $name);$len strlen($name);$str ;for ($i 0; $i < $len - 1; $i $i 2){$c $name[$i];$c2 $name[$i 1];if (ord($c) > 0){ //两个字节的文字$str . \u.base_convert(ord($c), 10, 16).str_pad…

django models索引_sql – 为什么Django显式地在唯一字段上创建索引

更新&#xff1a;进一步简化实验psql的Q&#xff1a;对于以下Django模型&#xff1a;class Book(models.Model):name models.TextField(uniqueTrue)pg_dump(PostgreSQL 9.3)显示下表&限制&#xff1a;CREATE TABLE book (id integer NOT NULL,name text NOT NULL,);ALTER …

php获取指定日期的万年历,分享3个php获取日历的函数

提供一个日期,获取这个日期的星期对应日历列表,键为星期标示$month_date 2015-09-25;$start_time strtotime($month_date);$start_week date(w, $start_time);$total_month_day date(t, $start_time);$weeks_in_month ceil(($start_week$total_month_day)/7);$month_day_a…

php获取html中文本框内容_小猿圈Python入门之批量获取html内body内容的方法

对于人工智能你了解有多少&#xff1f;你知道Python的使用吗&#xff1f;这个对于大部分初学者来说都是很难的&#xff0c;小猿圈Python讲师会每天为大家选择分享一个知识点&#xff0c;希望对你学习Python有所帮助&#xff0c;今天分享的就是批量获取html内body内容的方法。现…

php改名下载,PHP如何给上传的文件改名

PHP如何给上传的文件改名发布时间&#xff1a;2020-08-03 16:07:39来源&#xff1a;亿速云阅读&#xff1a;72作者&#xff1a;LeahPHP如何给上传的文件改名&#xff1f;相信很多没有经验的人对此束手无策&#xff0c;为此本文总结了问题出现的原因和解决方法&#xff0c;通过这…

python 循环 覆盖之前print内容_Python爬虫第二战---爬取500px图片

前言&#xff1a;如今的高速网络极大促进了信息的展示方式&#xff0c;高清图片&#xff0c;视频等成就了我们的视听盛宴。但是&#xff0c;我们获取到的图片或者视频可能是被压缩过的&#xff0c;所以总体上还是有点小瑕疵&#xff0c;今天呢&#xff0c;我给大家带来一篇使用…

php字符串分割tp模板,ThinkPHP 模板substr的截取字符串函数详解

ThinkPHP 模板substr的截取字符串函数在Common/function.php加上以下代码/**** 截取中文字符串**/function msubstr($str, $start0, $length, $charset"utf-8", $suffixtrue){if(function_exists("mb_substr")){$slice mb_substr($str, $start, $length, $…

macyy_macyy进频道失败怎么办

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。macyy进频道失败的解决方法&#xff1a;1、进入不了频道请先留意自己当地的网络状况是否良好&#xff0c;电脑上尽量不要开启占用网络资源的软件&#xff0c;如&#xff1a;下载工具…

tomcat.exe java home,tomcat.exe启动和startup.bat启动的不同

一、tomcat7.exe与startup.bat的区别&#xff1a;1、这两个都可以启动tomcat&#xff0c;但tomcat7.exe必须安装了服务才能启动&#xff0c;而startup.bat不需要2、另外一个区别是它们启动所使用的JAVA环境配置是分开的tomcat7.exe启动所使用JAVA配置与服务启动所使用的JAVA配置…

acc定义代码 神经网络_神经网络的这几个坑,你都躲过了吗

因为AI这两年的火爆&#xff0c;大家拿着锤子到处找钉子&#xff0c;锤子当然也砸到了我头上&#xff0c;有很多做业务的同事尝试通过AI的方法解决需要一些很复杂的业务逻辑算法&#xff0c;同时需要很多参数组合才能搞定的问题。但因为都是非科班出身也没有系统学习&#xff0…

java事件绑定,Java编程GUI中的事件绑定代码示例

程序绑定的概念&#xff1a;绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说&#xff0c;绑定分为静态绑定和动态绑定&#xff1b;或者叫做前期绑定和后期绑定静态绑定&#xff1a;在程序执行前方法已经被绑定&#xff0c;此时由编译器或其它连接程序实…

python抽荣耀水晶_教你2种免费拿荣耀水晶的方法,获奖概率让人惊喜,一般人我不告诉他...

在王者荣耀中荣耀水晶一直是许多玩家想要得到的&#xff0c;那一般来说想要获取一个荣耀水晶需要花费大约2000RMB的样子&#xff0c;但是可喜的是王者荣耀这个游戏就是这么的亲民&#xff0c;会时不时的上线一些免费赠送的活动&#xff0c;那今天就告诉大家最近2种获取荣耀水晶…

matlab中右三角形方向,《有限元基础教程》_【MATLAB算例】4.7.1(2) 基于3节点三角形单元的矩形薄板分析(Triangle2D3Node)...

【MATLAB 算例】4.7.1(2) 基于3节点三角形单元的矩形薄板分析(T riangle2D3Node)如图4-20所示为一矩形薄平板&#xff0c;在右端部受集中力100 000F N 作用&#xff0c;材料常数为&#xff1a;弹性模量7110E Pa ?&#xff0c;泊松比13μ&#xff0c;板的厚度0.1t m 。基于MA T…

uv转化率多少正常_浏览量(PV)和访客数(UV)和跳出率是什么意思?

1.什么是访客数(UV访客数就是指一天之内到底有多少不同的用户访问了网站。访客数要比IP数更能真实准确地反映用户数量。百度统计完全抛弃了IP这个指标&#xff0c;而启用了访客数这一指标&#xff0c;因为IP往往不能反映真实的用户数量。尤其对于一些流量较少的企业站来说&…