Как объявить пустой объект для подпроцесса? - PullRequest
0 голосов
/ 04 ноября 2019

Мне нужно запустить команду оболочки из скрипта Python. Я использую библиотечный подпроцесс. Я хотел бы упаковать эту команду, чтобы попробовать / исключить блок в случае какой-либо ошибки. Однако я не могу получить информацию из переменной result в блоке except, которая была записана в try. Я пытался объявить объект результата из блока try / кроме, но я не нашел решения, которое было бы работой. Вот мой код

import subprocess

result = None

try:
    result = subprocess.run(['lsdkdfk'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    print(result.stdout)
except Exception as e:
    print(result.stderr) #this doesn't work

Может ли кто-нибудь мне помочь?

1 Ответ

2 голосов
/ 04 ноября 2019

subprocess.run выдает ошибку FileNotFoundError и не возвращает ничего, если не может найти команду, которую вы пытаетесь использовать. 'lsdkdfk' не является допустимой командой, и поэтому result никогда ничего не назначается, и нет stderr для просмотра. Однако вы можете распечатать перехваченное исключение, если хотите.

Если команда найдет команду, но сама команда не выполнится, исключение не будет выдано, если вы не укажете аргумент check=True. Теперь вы также можете просматривать stderr.

>>> try:
...   result = subprocess.run(["ls", "asdf"], capture_output=True, encoding="utf-8")
... except FileNotFoundError as e:
...   print("I caught this: ", e)
...
>>> result.stdout
''
>>> result.stderr
"ls: cannot access 'asdf': No such file or directory\n"
>>> try:
...   result = subprocess.run(["invalidcmd", "asdf"], capture_output=True, encoding="utf-8")
... except FileNotFoundError as e:
...   print("I caught this: ", e)
...
I caught this: [Errno 2] No such file or directory: 'invalidcmd'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...