Для удобства я пытаюсь создать функцию, которая может запускать команды bash из Python. Я хотел бы вывести любой стандартный вывод, а также сохранить все стандартные выходные данные/стандартный вывод для справки. Однако, похоже, я сталкиваюсь с проблемами, когда задействован пользовательский ввод. В следующем примере стандартный вывод не выводится (вообще ничего не отображается) до тех пор, пока не будет нажата клавиша Enter, что немедленно пропускает стандартный ввод.
Установка подпроцесса stdin=subprocess.PIPE не помогает, это пропускает полностью любой ввод пользователя
import subprocess
def run_command(command):
result = {}
try:
process = subprocess.run(
command,
shell=True,
stdin=None, #setting to subprocess.PIPE skips userinput entirely
stdout=None,
stderr=None,
universal_newlines=True,
capture_output=True
)
result = {
"returncode": process.returncode,
"stdout": process.stdout,
"stderr": process.stderr
}
#when a command requests userinput, this doesn't seem to print UNTIL enter is hit
print(process.stdout)
except Exception as e:
print(f"Exception occurred: {e}")
return result
#Example: has an issue when run a second time, because stdin for existing file overwrite
result = run_command(f"ssh-keygen -t ed25519 -N '' -f ./ssh_key_test")
print(result)
Подробнее здесь: https://stackoverflow.com/questions/790 ... while-also
Python3 subprocess.run – как печатать/захватывать выходные данные (stdout, stderr), а также разрешать ввод пользователя ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Ничего не происходит после subprocess.stdout.readline()/subprocess.stdout.read()
Anonymous » » в форуме Python - 0 Ответы
- 60 Просмотры
-
Последнее сообщение Anonymous
-