我的python脚本调用可执行文件(从C ++编译的二进制文件),如下所示:
subprocess.call(["./rti", '1', '0.05', fileForRTI])
其中rti
可执行名称,1
,0.05
和fileForRTI
是参数。
此可执行文件生成输出到控制台,但我也想将其输出到文本文件。我试过的是这个(根据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
可执行文件需要很长时间来生成代码,那么是否可以停止终止并输出到已经在屏幕上看到的文件。
答案 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
类