python执行系统命令并获取命令行回显,python执行系统命令后获取返回值的几种方式
欢迎来到“盛鑫培训手册”!
在实际开发中,除了编写python自己的代码,往往还需要执行操作系统的命令。在python3中,建议使用子进程模块来执行系统命令。基本用法如下
#导入模块
导入子流程
#执行系统命令WC-L。
cmd=subprocess.run([ls ,-l])
#运行状态,运行成功返回0
cmd .返回代码
0在上面的代码中,使用了一个列表来记录执行的命令、软件名称、选项、参数等。所有这些都对应于列表中的一个元素。把direct软件的设置一个一个的划分成列表元素是比较复杂的。推荐以下写法。
导入shlex,子流程
command_line=ls -l
args=shlex.split(命令行)
Subprocess.run(args)通过shlex模块的split函数,可以将字符串分隔成合适的参数列表。当然,也可以直接使用字符串参数。用法如下
cmd=subprocess.run(ls -l ,shell=True)
注意shell参数的值必须设置为True才能支持字符串写入,否则程序会认为第一个参数是文件路径,然后如果找不到路径就报错。
cmd=subprocess.run(ls -l )
回溯(最近一次呼叫):
模块中文件 stdin 的第1行
文件/usr/lib/python 3.5/subprocess . py ,第693行,运行中
使用Popen(*popenargs,**kwargs)作为流程:
__init__中文件“/usr/lib/python 3.5/subprocess . py”的第947行
恢复信号,开始新会话)
文件/usr/lib/python 3.5/subprocess . py ,第1551行,in _execute_child
引发child_exception_type(errno_num,err_msg)
未找到错误:[errno2]没有这样的文件或目录: ls-l shell参数的真正作用是将其交给系统的shell脚本来执行命令,例如复杂的linux命令。
subprocess . run( cat config . txt grep samples cut-f1a . txt ,shell=true)除了简单地执行系统命令,有时
cmd=subprocess.run(ls -l ,shell=True,capture_output=True)
Cmd.stdout.decode(utf8 )将capture_output参数的值设置为True,stdout属性将包含在返回的对象中。默认情况下,执行结果以字节为单位返回,只有使用decode进行解码才能将其转换为字符串。
此外,还支持有限的执行时间,如果超时,将会报告一个错误,如下所示
cmd=subprocess.run(ls -l ,shell=True,timeout=100)
时间参数的单位是秒。对于从网络下载数据的操作,设置超时时间可以避免网络造成的拥塞。
这些是基本用法。在子流程模块中,还提供了Popen方法,提供了更加灵活和强大的功能。它可以控制系统命令的输入和输出,并通过管道连接多个命令。标准输入控件的经典使用场景是运行交互式命令,用法如下
导入子流程
# stdin控制标准输入流
# stdout控制标准输出流
s=子流程。Popen(python ,stdout=子进程。管道,stdin=子进程。管道,壳=真)
#将参数写入标准输入流
s.stdin.write(bprint(hello ))
14
标准输入关闭()
#从标准输出流中读取运行结果。
out=s.stdout.read()。解码(“utf8”)
s .标准输出.关闭()
在外
“hello\n”的另一种用法是捕获程序的标准输出和标准错误流。用法如下
p=子流程。Popen([ls ,-l],stdout=子进程。管道)
Outs,errors=p.communicate () Outs存储程序的输出结果,error存储程序的错误信息。当我们不想显示程序的输出和错误信息时,我们可以将标准输出和标准错误流重定向到/dev/null,如下所示
Subprocess.popen ([ls ,-l],stdout=subprocess.devnull,stderr=subprocess.devnull)。更多用法参见API子流程模块文档。
目标
—如果你喜欢,分享给你的朋友—
关注我们,解锁更多精彩内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。