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ş:
Python alt süreci boru ile komut...
Python, bir dizin var olmadığını kontr...
Nasıl bir dize bir sayı (yüzen) olup o...
Python: eğer bir nesne ya da bir dizi ...
Ayarı boru Python stdout zaman doğru k...