我正在尝试运行一个可执行文件并使用subprocess.Popen
;捕获它的输出。但是,我似乎没有得到所有的输出。
import subprocess as s
from subprocess import Popen
import os
ps = Popen(r'C:\Tools\Dvb_pid_3_0.exe', stdin = s.PIPE,stdout = s.PIPE)
print 'pOpen done..'
while:
line = ps.stdout.readline()
print line
手动打开时,它比原始 exe 文件少打印两行。
我尝试了另一种方法,结果相同:
f = open('myprogram_output.txt','w')
proc = Popen('C:\Tools\Dvb_pid_3_0.exe ', stdout =f)
line = proc.stdout.readline()
print line
f.close()
谁能帮我获取exe的完整数据?
正如塞巴斯蒂安所问:
原始exe文件最后几行o / p:
-Gdd : 通用计数 (1 - 1000)
-Cdd : 剪切开始于 (0 - 99) -Edd : 剪切结束于 (1 - 100)
请选择下面的流文件号:
1 - .\pdsx100-bcm7230-squashfs-sdk0.0.0.38-0.2.6.0-prod.sao.ts
运行后得到的 o/p:
-P0xYYYY : Pid been interested
-S0xYYYY : 服务 ID 感兴趣
-T0xYYYY : 传输 ID 感兴趣
-N0xYYYY : 网络 ID 感兴趣
-R0xYYYY : 旧的 Pid 被这个 PID 替换
-Gdd : 通用计数 (1 - 1000)
所以我们可以看到缺少一些行。请选择下面出现的完整数字后,我必须写1并选择值。
我尝试使用 ps.stdin.write('1\n')。它没有打印exe文件中的值
新代码:
#!/usr/bin/env python
from subprocess import Popen, PIPE
cmd = r'C:\Tools\Dvb_pid_3_0.exe'
p = Popen(cmd, stdin=PIPE, stdout=None, stderr=None, universal_newlines=True)
stdout_text, stderr_text = p.communicate(input="1\n\n")
print("stdout: %r\nstderr: %r" % (stdout_text, stderr_text))
if p.returncode != 0:
raise RuntimeError("%r failed, status code %d" % (cmd, p.returncode))
谢谢塞巴斯蒂安。我能够看到整个输出,但无法使用当前代码输入任何输入。