У меня есть следующий код и я пытаюсь запустить в Idle в linux.Чтение подпроцесса чтения не дает никакого вывода
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(['youtube-dl', '-l', '-c', 'https://www.youtube.com/watch?v=utV1sdjr4PY'], 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
while True:
try: line = q.get_nowait() # or q.get(timeout=.1)
except Empty:
pass
#print('no output yet')
else: # got line
print line
Но всегда печатается «нет вывода». Редактировать: Я редактировал код, и он работает. Но у меня другая проблема. Процент загрузки обновляется в одной строке, но код читает его только после завершения строки
Из-за бикини, может быть? попробуйте sys.stdout.write («\ rNo line») вместо печати («no output yet»). Вы увидите некоторый результат, но я не знаю, является ли тот, который вы ищете – cox
@cox. Какое это имеет отношение к бикини? –
Попробуйте сценарий (или следуйте ссылке на YouTube). Это «Sexy Bikini Girls Epic Fail Compilation 2013-AYlb-7TXMxM.mp4». – cox