Подпроцесс Python? - PullRequest
       7

Подпроцесс Python?

2 голосов
/ 14 ноября 2011

Я думаю, что я мог бы повторить вопрос, но я не нашел ни одного из ответов, подходящих для моего требования.Прошу прощения за мое невежество.

У меня работает программа, которая непрерывно выплевывает некоторые двоичные данные с сервера. Она никогда не останавливается до тех пор, пока она не будет уничтожена.вывод и обработать его как и когда он прибудет.Я испробовал несколько идей подпроцесса при переполнении стека, но безрезультатно.Пожалуйста, предложите.

p=subprocess.popen(args,stderr=PIPE,stdin=PIPE,stdout=PIPE,shell=FALSE)
#p.communicate#blocks forever as expected
#p.stdout.read/readlines/readline-->blocks
#select(on p.stdout.fileno())-->blocks

Какой метод лучше?

Ответы [ 3 ]

3 голосов
/ 14 ноября 2011

Чтение с ограничением длины:

proc = subprocess.Popen(args, stdin=None, stdout=subprocess.PIPE, stderr=None)
while True:
    chunk = proc.stdout.read(1024)
    # chunk is <= 1024 bytes

Это код из вашего комментария, немного измененный.У меня это работает:

import subprocess

class container(object):
    pass

self = container()
args = ['yes', 'test ' * 10]

self.p = subprocess.Popen(args, stdin=None, stderr=None,
                          stdout=subprocess.PIPE, shell=False)
while True:
    chunk = self.p.stdout.read(1024)
    print 'printing chunk'
    print chunk
0 голосов
/ 14 ноября 2011

Похоже, вы можете использовать асинхронную версию модуля подпроцесса .Для получения дополнительной информации, проверьте блог разработчика .

0 голосов
/ 14 ноября 2011

Вы можете запустить другую программу с выводом в файл, а затем использовать Python's f.readline () для хвоста файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...