Python3 subprocess.run – как печатать/захватывать выходные данные (stdout, stderr), а также разрешать пользовательский в ⇐ Python

Программы на Python
Anonymous
Python3 subprocess.run – как печатать/захватывать выходные данные (stdout, stderr), а также разрешать пользовательский в

Сообщение Anonymous »

Для удобства я пытаюсь создать функцию, которая может запускать команды 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

Вернуться в «Python»