Rumah > Soal Jawab > teks badan
Kod di bawah ialah apa yang saya gunakan setiap hari untuk memantau sambungan rangkaian Maklumat yang dikembalikan boleh diperolehi sebelum semalam (semalam sebelum semalam), tetapi kandungan yang dibaca oleh stdout.read() bermula semalam adalah kosong. Maklumat yang dikembalikan oleh saya terus ping hos dalam tetingkap CMD adalah China Unicom, dan maklumat pemulangan yang diperoleh dengan menggunakan kaedah panggilan juga adalah perkara biasa. Tolong bantu saya menyelesaikan keraguan saya
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
Arahan anda ping 10.9.88.69 tidak akan berhenti dalam persekitaran Linux,
Dan subproses.Popen lalai untuk menunggu arahan tamat sebelum mengembalikan hasil, yang menyekat
Boleh jadi macam ni
1 Biarkan ping tamat lebih awal. Tambah berbilang parameter -c untuk menentukan bilangan 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. Tukar blocking kepada non-blocking
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)