Я бы хотел выполнить простой командный файл с использованием Python.Но я получаю некоторую ошибку от процесса, говорящую, что имя файла, каталога или диска неверно.Я думаю, что лучший способ начать это показать код:
import subprocess as sp
from pathlib import Path
file = Path(r'C:\Program Files (x86)\test.bat')
p = sp.Popen(['"' + str(file) + '"'], stdin=sp.PIPE, stdout=sp.PIPE, stderr=sp.PIPE,
shell=True, universal_newlines=True)
outs, errs = p.communicate('', timeout=5)
print(outs, '\n-----\n', errs)
Я расширил это, добавив системный путь и изменив рабочий каталог:
import os
import sys
sys.path.append(file.parent)
os.chdir(file.parent)
Пакетный файл содержит тольконесколько эхо-команд для отладки.Поэтому я ожидаю, что приведенный выше код напечатает содержимое эхо.Я подтвердил, что могу вызывать его из командной строки из любой папки.Ранее я получал сообщение об ошибке разрешения файла (WinError 5
), так что это может быть связано, особенно с тем, что файл находится в Program Files.Эта ошибка была не в процессе, а в самом Python.
Я также попробовал ее с исполняемым файлом, и возникла похожая ошибка: WinError 2: the system cannot find the file specified
.Есть идеи, где я спотыкаюсь?
Попытки
- Когда ключевое слово
shell=True
удалено, WinError 5
возвращается - Когда
Popen
вызывается с ['cmd']
, а пакетный файл запускается с p.communicate('"' + str(file) + '"\n', timeout=5)
, ошибки не выдаются, и вывод содержит эхо-сигналы.Однако я полагаю, что пакетные файлы должны запускаться без явного открытия командной строки.