python - Nachdem subprocess.Popen den Befehl ausgeführt hat, sind die von stdout.read() empfangenen Informationen leer. Liegt es am Routing oder an einem eigenen Programmproblem?
PHP中文网
PHP中文网 2017-06-12 09:21:16
0
1
1183

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()

PHP中文网
PHP中文网

认证0级讲师

Antworte allen (1)
学习ing

你这个命令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)
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!