Скорее всего команды, которые вы пытаетесь запустить производят a stderr
, код которого не отображается. Можно отправить сообщения stderr
на номер stdout
, если вы не хотите обрабатывать его отдельно.
В подпроцессе, который относительно безопасен, я использую другую команду. И я сломаю его немного, а не одну длинную линию.
import subprocess
p = subprocess.Popen("python filedoesntexist",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
print(p.stdout.read())
Смотрите, что я добавил параметр stderr=subprocess.STDOUT
, это посылает все сообщения об ошибках в stdout
. В subprocess
пытается запустить "python filedoesntexist"
и так filedoesntexist
это файл, который не существует, он будет print
это сообщение:
b"python: can't open file 'filedoesntexist': [Errno 2] No such file or directory\n"
Но вы можете просто хочу, чтобы получить string
вместо bytes
, и вы можете добавить параметр universal_newlines=True
так:
p = subprocess.Popen("python filedoesntexist",
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
universal_newlines=True)
print(p.stdout.read())
Теперь она печатает только string
так:
python: can't open file 'filedoesntexist': [Errno 2] No such file or directory
Для получения дополнительной информации посетите python documentation
Редактировать
документация рекомендует использовать run()
, что может быть сделано, как это (обновляется после комментариев от JF Sebastian):
subprocess.run(["python", "filedoesntexist"])
Если вам необходимо обработать stdout
, добавьте параметры, описанные ранее в примерах Popen
.
Почему вы печатаете подпроцессы? Предложите взглянуть на [документацию python] (https://docs.python.org/3/library/subprocess.html) –
@ oystein-hr Я печатаю 'subprocess.Popen (...). Stdout.read () 'Я видел страницу много раз, но я все еще не могу использовать' subprocess' для моего проекта :( –