Я использую 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)
никогда не достигается.