python执行系统命令并获取命令行回显,python执行系统命令后获取返回值的几种方式

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: