Znów to samo pytanie.
Powodem jest - wciąż nie może pracować po przeczytaniu poniższych czynności:subprocess.Popen.stdout - czytanie stdout w czasie rzeczywistym (ponownie)
- Real-time intercepting of stdout from another process in Python
- Intercepting stdout of a subprocess while it is running
- How do I get 'real-time' information back from a subprocess.Popen in python (2.5)
- catching stdout in realtime from subprocess
Moja sprawa jest, że mam aplikacja konsolowa napisana w języku C, pozwala wziąć na przykład ten kod w pętli:
tmp = 0.0;
printf("\ninput>>");
scanf_s("%f",&tmp);
printf ("\ninput was: %f",tmp);
Ciągle odczytuje niektóre dane wejściowe i zapisuje niektóre dane wyjściowe.
Mój kod Pythona do interakcji z nim jest następujący:
p=subprocess.Popen([path],stdout=subprocess.PIPE,stdin=subprocess.PIPE)
p.stdin.write('12345\n')
for line in p.stdout:
print(">>> " + str(line.rstrip()))
p.stdout.flush()
tej pory ilekroć czytam formularz p.stdout
zawsze czeka, aż proces zostanie zakończony, a następnie wysyła pusty ciąg. Próbowałem wiele rzeczy - ale wciąż taki sam wynik.
Próbowałem Pythona 2.6 i 3.1, ale wersja nie ma znaczenia - po prostu muszę sprawić, żeby to działało gdzieś.
Jestem w dokładnie tej samej sytuacji, po przeczytaniu wszystkich tych pytań i nadal nie znalazłem nic eleganckiego, co działa. –
related: [Jak poprawnie współpracować z procesem za pomocą modułu podprocesowego] (http://stackoverflow.com/q/443057/4279) – jfs
Przyszedłem tutaj z tym samym pytaniem, znalazłem odpowiedź tutaj http://stackoverflow.com/q/375427/168034 – phunehehe