首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python 模块 subprocess 派生新进程

Python使用模块subproces,生成新的进程并与之通信。在Python2中,提供了call(),check_call()和check_output()函数生成新进程的API,他们也被带到了Python3。在Python3中,新增了高级函数run(),能够生成新进程并收集输出。

执行:run()函数的第一个参数是一个字符串列表,这样可以避免被shell解析特殊的字符。返回一个CompletedProcess实例,包含输出的信息或者退出状态。使用属性shell设置为True,会让subprocess生成一个新shell进程,然后再运行命令,此时第一个参数需要传递一个字符串。

执行:call()函数返回子进程的退出状态,相当于不传给run()参数check=True错误处理设置属性check为True,如果命令执行发生错误,会触发异常CalledProcessError。

执行:

当给run()属性check设置为True,相当于调用check_call()函数捕获输出上例中,执行run()函数,默认都把子进程的输出打印了,这是因为子进程的输入输出通道和父进程的一致。为了捕获输出或者错误信息,需要传递属性stdout或者stderr,设置为subprocess.PIPE。

执行:当调用run()时,check=True而且stdout=PIPE,相当于调用check_output()函数为了捕获错误消息,我们可以把标准错误重定向到标准输出,设置属性stderr为STDOUT。

执行:上例中,使用shell命令输出两个字符串,一个是标准输出,另一个把标准输出重定向到标准错误。因为设置了属性stderr,最终两个字符串都返回了。抑制输出设置stdout为DEVNULL抑制输出数据,下面的例子抑制了标准输出流和标准错误流。

执行:使用Popen实例化Popen,并且设置stdout为PIPE,调用communicate()方法捕获输出。

执行:

设置参数stdin为PIPE,然后调用communicate()方法可以向子进程传递数据。

执行:

同时设置stdin和stdout为PIPE,能够和子进程双向读取和写入数据。

执行:通过设置stdout和stderr,同时捕获输出和错误。

执行:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706A13SA400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券