SORU
17 Aralık 2008, ÇARŞAMBA


Engellenmeyen bir alt süreci okumaya devam edin.Python BORU

Bir alt süreci başlatmak ve çıkış akışı bağlanmak için subprocess module (stdout) kullanıyorum. Engellenmeyen onun stdout okur çalıştırmak mümkün olmak istiyorum. Bir yol yapmak için vardır .engellenmeyen veya akış veri olup olmadığını kontrol etmek için önce seçeneği .readline çağırmak? Bu taşınabilir olması ya da en azından Windows ve Linux altında çalışmak isterim.

şimdilik (eğer veriler mevcuttur .readline engelleme) nasıl yaptığımı burada

p = subprocess.Popen('myprogram.exe', stdout = subprocess.PIPE)
output_str = p.stdout.readline()

CEVAP
4 ŞUBAT 2011, Cuma


fcntl, 12*, asyncproc *Bu durumda yardımcı olmaz.

Hem Windows hem de Linux üzerinde engelleme olmadan akışı okumak için güvenilir bir yol Queue.get_nowait() kullanmak için:

import sys
from subprocess import PIPE, Popen
from threading  import Thread

try:
    from Queue import Queue, Empty
except ImportError:
    from queue import Queue, Empty  # python 3.x

ON_POSIX = 'posix' in sys.builtin_module_names

def enqueue_output(out, queue):
    for line in iter(out.readline, b''):
        queue.put(line)
    out.close()

p = Popen(['myprogram.exe'], stdout=PIPE, bufsize=1, close_fds=ON_POSIX)
q = Queue()
t = Thread(target=enqueue_output, args=(p.stdout, q))
t.daemon = True # thread dies with the program
t.start()

# ... do other things here

# read line without blocking
try:  line = q.get_nowait() # or q.get(timeout=.1)
except Empty:
    print('no output yet')
else: # got line
    # ... do something with line

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • Caina Mondo Zine

    Caina Mondo

    13 EKİM 2007
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009