cari

Rumah  >  Soal Jawab  >  teks badan

python - Selepas subprocess.Popen melaksanakan arahan, maklumat yang diterima oleh stdout.read() adalah kosong Adakah ia disebabkan oleh penghalaan atau masalah programnya sendiri?

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中文网2748 hari yang lalu1264

membalas semua(1)saya akan balas

  • 学习ing

    学习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)

    balas
    0
  • Batalbalas