Как описано выше, вы можете (и должны) использовать модуль подпроцесс .
По умолчанию параметр shell
равен False
. Это хорошо и вполне безопасно. Кроме того, вам не нужно передавать полный путь, просто передайте имя исполняемого файла и аргументы в виде последовательности (кортеж или список).
import subprocess
# This works fine
p = subprocess.Popen(["echo","2"])
# These will raise OSError exception:
p = subprocess.Popen("echo 2")
p = subprocess.Popen(["echo 2"])
p = subprocess.Popen(["echa", "2"])
Вы также можете использовать эти две вспомогательные функции, уже определенные в модуле подпроцесса:
# Their arguments are the same as the Popen constructor
retcode = subprocess.call(["echo", "2"])
subprocess.check_call(["echo", "2"])
Помните, что вы можете перенаправить stdout
и / или stderr
на PIPE
, и, таким образом, он не будет выводиться на экран (но вывод все еще доступен для чтения вашей программой на python). По умолчанию stdout
и stderr
оба None
, что означает без перенаправления , что означает, что они будут использовать тот же stdout / stderr, что и ваша программа на python.
Кроме того, вы можете использовать shell=True
и перенаправить stdout
. stderr
на ТРУБУ, и, таким образом, сообщение не будет напечатано:
# This will work fine, but no output will be printed
p = subprocess.Popen("echo 2", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# This will NOT raise an exception, and the shell error message is redirected to PIPE
p = subprocess.Popen("echa 2", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)