Я бегу сценарий Python, который запускает класс Java, который требует недетерминированную пользовательского ввода:Чтение Java System.out.print с помощью Python подпроцесс
import sys
import subprocess
from subprocess import Popen, PIPE
p = Popen("java myclass", shell=True, stdout=subprocess.PIPE)
while True:
inline = p.stdout.readline()
if not inline:
break
sys.stdout.write(inline)
sys.stdout.flush()
Когда выход отображается с помощью System.out.print()
, выход отображается правильно. Однако, когда приглашение для ввода пользователя печатается с System.out.print()
, вывод не отображается. Я попытался переключить p.stdout.readline()
на p.stdout.read()
, но затем вывод не выводится. Есть ли способ отобразить приглашение ввода, которое не имеет возврата каретки?
EDIT
Например, если класс Java содержит следующее:
System.out.println("Message 1);
System.out.println("Message 2);
System.out.print("Enter a number:")
Запуск чистый код Java будет отображать все 3 линии.
код работает через Python будет отображаться только следующее:
Message 1
Message 2
Вы можете использовать 'strip' удалить возврат каретки:.' Инлайн = p.stdout.readline() полоса() ' –
Я смущен. Все распечатки System.out выполняются в STDOUT, поэтому чтение должно быть не таким. Тем не менее, System.in читает из STDIN, поэтому вам придется записывать «пользовательский ввод» с соответствующей комбинацией клавиш, чтобы указать, что вход остановлен. – CodeChimp