Python Popen, есть ли способ прочитать стандартный вывод, если он не содержит перевода строки? - PullRequest
0 голосов
/ 18 декабря 2018

Я использую Popen для чтения вывода программы и автоматического заполнения данных, но сталкиваюсь с проблемой.

У меня есть программа, которая запрашивает вывод у пользователя.Это механизм лицензирования проприетарного продукта.Он запрашивает базовые вещи, такие как Does the current date match XX-YY-ZZZZ? или Machine limit?

Проблема заключается в том, что эти приглашения не содержат символа новой строки, поэтому попытка использовать proc.stdout.read() не работает.

Когда это приложение выполняется вручную, мы, очевидно, можем прочитать текст, чтобы ответить на него, поэтому, если я правильно понимаю, это индикатор очищенного буфера.Это правильно?

Как мне прочитать stdout, даже если в подсказке из приложения нет новой строки?

def license_code(self, code):
    os.chdir(self.sql_dir)
    print('Current directory: {}'.format(os.getcwd()))
    proc = subprocess.Popen(
        shlex.split('bin/dlm -i'),
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        stdin=subprocess.PIPE,
        bufsize=0
    )

    # Give it 1 seconds
    _now = datetime.datetime.now()
    _response = b''
    while (datetime.datetime.now() - _now).total_seconds() < 1:
        _len = len(_response)
        print('test')
        _response += proc.stdout.read()
        print(_response)
        if len(_response) != _len:
            _now = datetime.datetime.now()
    print(_response.decode())

Строка, содержащая proc.stdout.read(), зависает и print(_response) никогда не достигается.

...