Найти - Пользователи
Полная версия: subprocess выдает данные с задержкой
Начало » Python для новичков » subprocess выдает данные с задержкой
1
odnochlen
import subprocess
PIPE = subprocess.PIPE
cmd = 'ping google.com -n 20'
p = subprocess.Popen(cmd, shell=False, stdin=PIPE, stdout=PIPE, stderr=subprocess.STDOUT)
for line in p.stdout: 
    print line,
Текст выводится одним куском после завершения пинга. Windows, интерактивный интерпретатор. Как побороть?
EBFE
for line in iter(p.stdout.readline,''):
  print line,
или
line = 'Ping:'
while line:
  line = p.stdout.readline()
  print line,
odnochlen
А какая разница между stream.readline и for line in stream?
EBFE
У stream.next() вроде бы свой буффер.
http://docs.python.org/library/stdtypes.html#bltin-file-objects
In order to make a for loop the most efficient way of looping over the lines of a file (a very common operation), the next() method uses a hidden read-ahead buffer
odnochlen
Ну БЛИН. Два по сути одинаковых подхода, а работают по разному. Параша полная.

read-ahead - это же опережающее чтение, а тут, судя по всему, буферизация записи где-то.
odnochlen
Ага, таки не я один считаю это багом.
Совет там офигенный.
With the 3.0 version, the built-in open() is an alias for io.open;
with 2.6, you have to use io.open() explicitely.
И куда совать этот io.open?

А в тройке все работает. Как обычно, на двойку все забили. Когда ее уже можно будет выкинуть? ;(((
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB