Модуль subprocess
предоставляет более мощные средства для создания новых процессов и получения их результатов; использование этого модуля предпочтительнее, чем использование этой функции (os.system('command')
).
, поскольку это командный файл (cmd
), и только оболочка может запускать его, тогда аргумент оболочки должен иметь значение true. поскольку вы устанавливаете для аргумента оболочки значение true, команда должна иметь строковую форму, а не список.
используйте метод Popen
для создания нового процесса и сообщения для ожидания этого процесса (вы можете тайм-аут). если вы используете sh для связи с дочерним процессом, укажите PIPES
(см. пример mu, но вам это необязательно!)
код ниже для python 3.3 и выше
import subprocess
try:
proc=subprocess.Popen('myfile.cmd', shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
outs, errs = proc.communicate(timeout=15) #timing out the execution, just if you want, you dont have to!
except TimeoutExpired:
proc.kill()
outs, errs = proc.communicate()
для более старых python версий
proc = subprocess.Popen('myfile.cmd', shell=True)
t=10
while proc.poll() is None and t >= 0:
print('Still waiting')
time.sleep(1)
t -= 1
proc.kill()
В обоих случаях (python версии), если вам не нужна функция timeout
и вам не нужно взаимодействовать с дочерним процессом, тогда просто используйте:
proc = subprocess.Popen('myfile.cmd', shell=True)
proc.communicate()