Это должно работать:
subprocess.Popen(["C:\\Program Files\Microsoft Office\Office12\winword.exe", "P:\\docs\\daily checks.doc", "/mFilePrintDefault", "/mFileExit"]).communicate()
Или, альтернативно,
subprocess.Popen("'C:\\Program Files\Microsoft Office\Office12\winword.exe' 'P:\\docs\\daily checks.doc' /mFilePrintDefault /mFileExit", shell=True).communicate()
Когда вы используете shell=True
, команда выполняется через оболочку.Это означает, что вам нужно передать одну строку так же, как вы написали бы команду в оболочке, то есть с кавычками, чтобы предотвратить разделение аргументов с пробелами.
Когда вы используете shell=False
(значение по умолчанию), команда не выполняется через оболочку.Это означает, что вы должны разделить аргументы самостоятельно.То, как вы это делаете, передает список со всеми аргументами.В этом случае дополнительное цитирование не требуется, поскольку элементы списка уже предоставляют эту информацию.