Wie bekomme ich die Ausgabe von meiner .exe mit Teilprozess und Popen?

Ich bin versucht, eine ausführbare Datei auszuführen, und erfassen dessen Ausgang mit subprocess.Popen; aber ich weiß nicht zu sein scheinen immer alle ausgegeben.

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

Druckt es zwei Linien weniger als die original-exe-Datei, wenn manuell geöffnet.

Habe ich versucht einen alternativen Ansatz, mit dem gleichen Ergebnis:

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()

Kann jemand bitte helfen Sie mir, um Daten von der exe?

Da fragte Sebastian:

Original-exe-Datei die letzten Zeilen o/p:

-Gdd): Allgemeine Zählung (1 - 1000)

-Cdd : Schnitt Anfang an (0 - 99)
-Edd : Schnitt-Ende an (1 - 100)

Bitte wählen Sie die stream-Datei-Nummer unter:

1 - .\pdsx100-bcm7230-squashfs-sdk0.0.0.38-0.2.6.0-prod.sao.ts

O/p bekomme ich nach der Ausführung:

-P0xYYYY      : Pid been interested                                          

-S0xYYYY : Service-ID-Interesse
-T0xYYYY : Transport-ID interessiert
-N0xYYYY : Netzwerk-ID interessiert
-R0xYYYY : Eine alte Pid wurde ersetzt durch das PID
-Gdd): Allgemeine Zählung (1 - 1000)

Damit wir sehen können, einige Linien fehlen. Ich Schreibe 1 und dann Wert nach wählen Sie bitte die fule Zahl unten angezeigt.

Ich versuche mit ps.stdin.write('1\n'). Es hat nicht drucken Sie den Wert in der exe-Datei

Neuen code:

#!/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))

Dank Sebastien. Ich bin in der Lage zu sehen, die gesamte Ausgabe, aber nicht in der Lage zu füttern, in jedem Eingang mit dem aktuellen code.

Was sind die zwei Linien in Frage? Sind Sie sicher, dass Sie senden, um stdout und nicht stderr ?
Tippfehler in deinem ersten Beispiel, Einzug nach der while oder ist dein code wirklich so?
Ja Tippfehler es ist zwar wahr: während der Bearbeitung entfernt wurde

InformationsquelleAutor Ajith | 2012-09-26

Schreibe einen Kommentar