python - Selepas subprocess.Popen melaksanakan arahan, maklumat yang diterima oleh stdout.read() adalah kosong Adakah ia disebabkan oleh penghalaan atau masalah programnya sendiri?
PHP中文网
PHP中文网 2017-06-12 09:21:16
0
1
1244

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

PHP中文网
PHP中文网

认证0级讲师

membalas semua(1)
学习ing

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)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan