Heim > Fragen und Antworten > Hauptteil
Den folgenden Code verwende ich täglich, um die Netzwerkkonnektivität zu überwachen. Die zurückgegebenen Informationen konnten vorgestern abgerufen werden (Stand vorgestern), aber der von stdout.read() ab gestern gelesene Inhalt war leer. Die von mir im CMD-Fenster direkt an den Host zurückgegebenen Informationen sind China Unicom, und die mithilfe der Aufrufmethode erhaltenen Rückgabeinformationen sind ebenfalls normal. Bitte helfen Sie mir, meine Zweifel auszuräumen
cmd='ping 10.9.88.69'
P=subpross.Popen(cmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
reshult=p.stdout.read()
学习ing2017-06-12 09:23:16
你这个命令ping 10.9.88.69 在linux环境下是不会停止的,
而且subprocess.Popen默认是等待命令结束才返回结果,是阻塞的
可以这样
1.让ping早点结束 加多个以参数 -c 指定下ping的次数
cmd='ping 10.9.88.69 -c 3'
P=subpross.Popen(cmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
reshult=p.stdout.read()
2.把阻塞变为不阻塞
import os
import time
import fcntl
import subprocess
cmd = 'ping 10.9.88.69'
p = subprocess.Popen(cmd,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,shell=True)
fd = p.stdout.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
while True:
try:
line = p.stdout.readline()
print(line)
except:
time.sleep(1)