Tu je môj jednoduchý príklad:
import subprocess
cmd = "ping something.local -c 1"
tail = "tail -n 3"
ping = subprocess.Popen(cmd.split(" "), stdout=subprocess.PIPE)
tail = subprocess.Popen(tail.split(" "), stdin=ping.stdout, stdout=subprocess.PIPE)
ping.stdout.close()
out, err = tail.communicate()
print "Print values:"
print out
print err
A tu je príklad výstupu skriptu:
[~/python]$ python ping_stats.py
ping: cannot resolve tpeo.local: Unknown host
Print values:
None
Takže moje premenné out
a err
sú "prázdne", ale potrebujem ping: cannot resolve tpeo.local: Unknown host
chybná správa. Ako to môžem získať?
odpovede:
0 pre odpoveď č. 1Stačí zachytiť štandardnú chybu vo výsledku pomocou stderr=subprocess.STDOUT
.
Tiež použite shlex.split radšej než string.split(" ")
:
import subprocess
import shlex
cmd = "ping something.local -c 1"
ping = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out = ping.communicate()[0]
alebo:
import subprocess
import shlex
cmd = "ping unknown -c 1"
ping = subprocess.Popen(shlex.split(cmd), stderr=subprocess.PIPE,
stdout=subprocess.PIPE)
out, err = ping.communicate()
print out
print err