実行可能ファイルを実行し、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ファイルより2行少なく印刷されます。
同じ結果で別のアプローチを試しました:
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))
Sebastienに感謝します。出力全体を見ることができますが、現在のコードで入力をフィードすることはできません。