一尘不染

如何从Python执行程序?os.system由于路径中的空格而失败

python

我有一个需要执行外部程序的Python脚本,但由于某种原因失败了。

如果我有以下脚本:

import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();

然后它失败并显示以下错误:

无法将“ C:\ Temp \ a”识别为内部或外部命令,可操作程序或批处理文件。

如果我用引号将程序转义:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe"');
raw_input();

然后就可以了。但是,如果添加一个参数,它将再次停止工作:

import os;
os.system('"C:\\Temp\\a b c\\Notepad.exe" "C:\\test.txt"');
raw_input();

什么是执行程序并等待其完成的正确方法?我不需要从中读取输出,因为它是一个可视程序,可以完成工作然后退出,但是我需要等待它完成。

还要注意,将程序移动到非间隔路径也不是一种选择。

这也不起作用:

import os;
os.system("'C:\\Temp\\a b c\\Notepad.exe'");
raw_input();

注意交换的单/双引号。

不管有没有记事本的参数,它都会失败并显示错误消息

文件名,目录名称或卷标签语法不正确。


阅读 2217

收藏
2020-02-17

共1个答案

一尘不染

subprocess.call将避免必须处理各种shell的引用约定的问题。它接受列表,而不是字符串,因此参数更容易定界。即

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
2020-02-17