Я использую подпроцесс для порождения команды conda create
и захвата полученного stdout
для последующего использования. Я также немедленно вывожу stdout
в консоль, чтобы пользователь все еще мог видеть ход выполнения подпроцесса:
p = subprocess.Popen('conda create -n env1 python', stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
sys.stdout.write(line.decode(sys.stdout.encoding))
Это работает нормально до середины выполнения, когда conda create
требует ввода пользователя: он запрашивает Proceed (n/y)?
и ждет, пока пользователь введет параметр. Однако приведенный выше код не печатает приглашение, а просто ожидает ввода на пустом экране. После получения ввода приглашение печатается после этого, а затем выполнение продолжается, как и ожидалось.
Я предполагаю, что это связано с тем, что вход каким-то образом блокирует запись подсказки в stdout
, и поэтому readline
не получает новые данные до тех пор, пока блок ввода не будет снят.
Есть ли способ убедиться, что приглашение на ввод будет напечатано до того, как подпроцесс будет ожидать ввода данных пользователем? Обратите внимание, что я работаю в Windows.
readline
на самом деле ищет всю строку до символа конца строки\n
. ПодсказкаProceed (n/y)? y
не выводит всю строку, а ожидает ввода (y
) в строке. - person MisterMiyagi   schedule 28.07.2020read
вместо этого? - person Mrfence   schedule 28.07.2020