以shell命令“ cat file.txt”为例。

使用Popen,可以使用

import subprocess
task = subprocess.Popen("cat file.txt", shell=True,  stdout=subprocess.PIPE)
data = task.stdout.read()


使用check_output,可以运行

import subprocess
command=r"""cat file.log"""
output=subprocess.check_output(command, shell=True)


这些似乎是等效的。这两个命令的使用方式有何不同?

最佳答案

Popen是定义用于与外部进程进行交互的对象的类。 check_output()只是对Popen实例的包装,以检查其标准输出。这是Python 2.7(无文档字符串)的定义:

def check_output(*popenargs, **kwargs):
    if 'stdout' in kwargs:
        raise ValueError('stdout argument not allowed, it will be overridden.')
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
    output, unused_err = process.communicate()
    retcode = process.poll()
    if retcode:
        cmd = kwargs.get("args")
        if cmd is None:
            cmd = popenargs[0]
        raise CalledProcessError(retcode, cmd, output=output)
    return output


(定义有些不同,但最终仍然是Popen实例的包装。)

关于python - 在Python子进程中,使用Popen()和check_output()有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39510029/

10-13 09:43