subprocess.Popopen用法

#coding=utf-8
import subprocess

# 如果使用了stdout=subprocess.PIPE,则要自己打印输出,否则控制台不会打印
#
result=subprocess.Popen('dir',shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)

result.wait()
outs,errs=result.communicate()  #返回元组,标准输出以及err
#执行成功则打印输出的信息
if result.returncode==0:
    for i in outs.splitlines():
        print(i.decode('GBK')) #UTF-8

只想获取失败信息,忽略成功信息

result=subprocess.Popen('ddd',shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)

result.wait()
outs,errs=result.communicate()
#执行成功则打印输出的信息
if not result.returncode==0:
    for i in errs.splitlines():
        print(i.decode('GBK')) #UTF-8

有时调用稍微复杂的命令,该命令又会调用其他命令,虽然返回时0,但err却不为空,因此再加层判断

result=subprocess.Popen('ddd',shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)

result.wait()
outs,errs=result.communicate()
#执行成功则打印输出的信息 注意b''即使为不为None,因此不能用not None来判断
if not result.returncode==0 or not len(errs)==0:
    for i in errs.splitlines():
        print(i.decode('GBK')) #返回为字节,需要转成str
    for i in outs.splitlines():
        print(i.decode('GBK'))  # UTF-8

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 欢迎关注公众号“Tim在路上” 1.听说你对JVM有点研究,讲一讲JVM的内存模型吧(我说虚拟机栈,本地方法栈,程...
    Tim在路上阅读 3,615评论 4 91
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,779评论 18 399
  • https://draveness.me/golang/[https://draveness.me/golang/...
    shuff1e阅读 554评论 0 0
  • Java异步编程实战 chap1 认识异步编程 异步编程概念与作用在使用同步编程方式时,由于每个线程同时只能发起一...
    landon30阅读 1,218评论 0 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,617评论 0 11