将屏幕输出重定向到文本文件

时间:2014-12-14 16:45:42

标签: python

我的python脚本调用可执行文件(从C ++编译的二进制文件),如下所示:

subprocess.call(["./rti", '1', '0.05', fileForRTI])

其中rti可执行名称,10.05fileForRTI是参数。

此可执行文件生成输出到控制台,但我也想将其输出到文本文件。我试过的是这个(根据this):

import sys

someFile = 'testFile'
sys.stdout = open(someFile, "w")
print(str(subprocess.call(["./rti", '1', '0.05', fileForRTI])))

但由于某些原因,写入文件的只是' 1',而输出要大得多。

我也试过这个:

p = Popen(['./rti', '1', '0.05', fileForRTI], stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate(b"input data that is passed to subprocess' stdin")
rc = p.returncode
print(rc)

但它再次显示1。

编辑:Kasra的解决方案也提供了输出1,而不是我在屏幕上看到的输出。

不确定是否允许,但是一个附带问题,如果./rti可执行文件需要很长时间来生成代码,那么是否可以停止终止并输出到已经在屏幕上看到的文件。

1 个答案:

答案 0 :(得分:1)

您可以使用subprocess.check_output()

import subprocess
try:
    out_bytes = subprocess.check_output(["./rti", '1', '0.05', fileForRTI])
except subprocess.CalledProcessError as e:
    out_bytes = e.output # Output generated before error
    code= e.returncode # Return code

这将运行指定的命令并将其输出作为字节字符串返回。如果你需要 将结果字节解释为文本,添加进一步的解码步骤。例如:

out_text = out_bytes.decode('utf-8')

check_output()函数是执行外部命令的最简单方法 得到它的输出。但是,如果您需要与子进程执行更高级的通信,例如发送输入,则需要采用差异方法。为此,请直接使用subprocess.Popen