/ / Ako zachytiť chybu pingu s Pythonom? - python, ping

Ako chytiť chýb ping s Pythonom? - python, ping

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ď č. 1

Stačí 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