我可以将此程序的输出重定向到脚本吗?

时间:2018-04-01 02:25:31

标签: python stdin

我正在运行管理USB设备的二进制文件。二进制文件在执行时将结果输出到我指定的文件。

在python中有没有办法将二进制文件的输出重定向到我的脚本而不是文件?我只需要打开文件,并在这行代码运行后立即获取。

def rn_to_file(comport=3, filename='test.bin', amount=128):
    os.system('capture.exe {0} {1} {2}'.format(comport, filename, amount))

它不能用于子进程

from subprocess import check_output as qx
>>> cmd = r'C:\repos\capture.exe 3 text.txt 128'
>>> output = qx(cmd)
Opening serial port \\.\COM3...OK
Closing serial port...OK
>>> output
b'TrueRNG Serial Port Capture Tool v1.2\r\n\r\nCapturing 128 bytes of data...Done'

该文件的实际内容是一系列0和1.这不是将输出重定向到我的文件,而是打印输出的任何内容作为输出。

1 个答案:

答案 0 :(得分:1)

看起来你正在使用Windows,它有一个特殊的保留文件名CON,这意味着使用控制台(* nix上的模拟将是/dev/stdout)。

所以试试这个:

subprocess.check_output(r'C:\repos\capture.exe 3 CON 128')

可能需要在那里使用shell=True,但我怀疑你没有。{/ p>

我的想法是让程序写入实际为stdout的虚拟文件CON,然后让Python捕获它。

另一种选择是CreateNamedPipe(),它可以让你创建自己的文件名并从中读取,而不需要在磁盘上有实际的文件。有关详情,请参阅:createNamedPipe in python