2017-07-08 8 views
1

Ich habe den folgenden CodeBeenden eines unendlichen Prozesses in Python subprocess

c = open("text.txt", 'a')  

output = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE).communicate()[0] 

c.write(str(output)) 

Aber als der Ping unendlich ist, schließen sich die Code stucks in Zeile zwei bis ich das cmd

wie kann ich schließen die unendliche subprocess

ich benutze python 2

+0

Ich benutze Python 2 –

+0

Ich fand die Lösung dank @Saypy –

+0

Prozess = subprocess.Popen ('ping -t 127.0.0.1', stdout = subprozess.PIPE) time.sleep (10) process.kill() output = process.stdout.read() –

Antwort

2

können Sie verwenden Argument -n (unter Linux) für Ping begrenzte Anzahl von Ping-Signale zu setzen:

process = subprocess.Popen('ping -n 1 127.0.0.1', shell=True, stdout=subprocess.PIPE) 
output = process.communicate()[0] 
with open("text.txt", 'a') as f: 
    f.write(str(output)) 

Oder nur eine einzige erste Zeile lesen:

process = subprocess.Popen('ping 127.0.0.1', shell=True, stdout=subprocess.PIPE, universal_newlines=True) 

output = process.stdout.readline() 
process.stdout.close() 
process.kill() 

with open("text.txt", 'a') as f: 
    f.write(str(output)) 
+0

Prozess = subprocess.Popen ('ping -t 127.0.0.1', stdout = Unterprozess.PIPE) output = process.communicate() [0] process.kill() noch der Code bleibt stecken –

+0

Ich habe meine Antwort aktualisiert. – SayPy

+0

funktioniert nicht! process = subprocess.Popen ('ping 127.0.0.1', shell = Wahr, stdout = subprocess.PIPE, universal_newlines = Wahr) output = process.stdout.readline() process.stdout.close() process.kill() Drucken (Ausgabe) druckt nichts –

1

Alternativ Sie check_output und fügen Sie eine timeout verwenden können:

from subprocess import check_output 

output = check_output('ping -t 127.0.0.1', timeout=seconds) 
0
process = subprocess.Popen('ping -t 127.0.0.1', stdout=subprocess.PIPE) 
time.sleep(10) 
process.kill() 
output=process.stdout.read() 

mit diesem Code, Subprozess läuft und Daten werden stdout, gegeben werden

müssen wir

nicht kommunizieren, wann immer Sie den Prozess stoppen wollen,

Verwendung process.kill()

und erhalten Daten mit stdout.read()