所以,我正在编写一个 python 脚本,我需要在其中调用另一个在标准输出中打印几行的 python 脚本。我想将被调用脚本的输出存储在一个列表中,并在主脚本中处理它们。
一种简单的方法是将结果打印到文件(file3)中并读取文件,如下所示
subprocess.call("./vecdiff.py file1 file2 > file3")
f = open("file3", "r")
如何将输出直接重定向到主脚本中的某些列表中?
所以,我正在编写一个 python 脚本,我需要在其中调用另一个在标准输出中打印几行的 python 脚本。我想将被调用脚本的输出存储在一个列表中,并在主脚本中处理它们。
一种简单的方法是将结果打印到文件(file3)中并读取文件,如下所示
subprocess.call("./vecdiff.py file1 file2 > file3")
f = open("file3", "r")
如何将输出直接重定向到主脚本中的某些列表中?
最简单的方法是调用subprocess.check_output
which 调用进程并返回其输出(或在非零返回码上引发异常,但您仍然可以通过异常对象访问输出)。它可以轻松处理STDOUT
和STDERR
(尽管只有STDOUT
默认情况下)。
手册中的示例:
>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'
如果您的流程正在生成大量数据,并且您想在它运行时对其进行处理,则必须打开管道并communicate
按照其他答案中的说明使用。
如下,将子进程的stdout和stderr重定向到PIPE,然后你可以使用'communicate()'方法从PIPE获取子进程的stdout和stderr。“管道”是父进程和子进程之间的管道。
from subprocess import Popen, PIPE
p = Popen("./vecdiff.py file1 file2", stdout=PIPE, stderr=PIPE)
output, errput = p.communicate()
如果使用subprocess.Popen()
,则可以使用 保存输出communicate()
。例如:
proc = subprocess.Popen("./vecdiff.py file1 file2", stdout=subprocess.PIPE)
output = proc.communicate()
用铅轻松完成:
from plumbum.cmd import python
cmd = python['./vecdiff.py']['file1', 'file2']
for line in cmd().splitlines():
print line