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

2024-10-04 07:26:38 发布

您现在位置: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可执行文件需要很长时间才能生成代码,那么是否可以停止、终止并输出到屏幕上已经看到的文件。你知道吗


Tags: 文件脚本可执行文件屏幕stdinstdoutsyscall
1条回答
网友
1楼 · 发布于 2024-10-04 07:26:38

您可以使用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

相关问题 更多 >