Необходимо получить код возврата из команды cmd приведенного ниже кода, используя python
Это код, который я хочу запустить в cmd с использованием Python, и я хочу, чтобы он возвращал данные, с которыми я продолжаю в программе соответственно
SCHTASKS /query /TN TaskName >NUL 2>&1
Как видите, этот код, вероятно, возвращает ложное значение, если TaskName не найдено.
Я хочу получить эти данные, т. Е. Если задача существует, мне нужно вернуть код ошибки и получить другой код возврата, когда он существует.
Я пытался с помощью
var=subprocess.Popen(["start", "cmd", "/k", "SCHTASKS /query /TN TaskName >NUL 2>&1"], shell = True)
print var
Но это просто дает мне некоторое местоположение объекта в памяти, по-видимому. Так как для этого используется команда cmd, для возврата требуется другой синтаксис.
1 ответ
Не использовать start
начать в фоновом режиме, так как вы не сможете получить код возврата или вывод.
Если вы просто хотите получить код возврата команды и скрыть вывод / сообщение об ошибке, просто создайте Popen
Затем объект ожидает завершения задачи:
p = subprocess.Popen(["SCHTASKS","/query","/TN","TaskName"],stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
return_code = p.wait()
Python 2 не имеет DEVNULL
, поэтому вы должны открыть нулевой поток вручную ( как скрыть вывод подпроцесса в Python 2.7):
with open(os.devnull, 'w') as FNULL:
p = subprocess.Popen(["SCHTASKS","/query","/TN","TaskName"],stdout=FNULL, stderr=FNULL)
return_code = p.wait()
если вам нужно сделать это в фоновом режиме, оберните вышеуказанный код в поток Python. Также:
- Всегда передавайте аргументы командной строки в виде списков, чтобы кавычки (при необходимости) обрабатывались автоматически
- Не использовать
start
когда вы теряете контроль над процессом и его кодом возврата. - Не использовать
shell=True
, так как с помощьюPopen
перенаправление наDEVNULL
более портативный.