shellexecute - 在python中,怎么执行某个程序? 路径中os.system会由于空格失败?

我有一个python脚本需要执行一个外部程序,但是失败了。

我有以下脚本:


import os;
os.system("C:Tempa b cNotepad.exe");
raw_input();

然后它失败了,出现以下错误:


'C:Tempa' is not recognized as an internal or external command, operable program or batch file.

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


import os;
os.system('"C:Tempa b cNotepad.exe"');
raw_input();

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


import os;
os.system('"C:Tempa b cNotepad.exe""C:test.txt"');
raw_input();

执行程序并等待它完成的正确方法是什么?



import os;
os.system("'C:Tempa b cNotepad.exe'");
raw_input();


The filename, directory name, or volume label syntax is incorrect.

时间:

subprocess.call将避免处理各种shell的引用约定时遇到的问题,它接受一个列表而不是字符串,因此参数更容易被分隔。


import subprocess
subprocess.call(['C:Tempa b cNotepad.exe', 'C:test.txt'])

这里有一种不同的方法。


import os
os.startfile(filepath)

例如:


import os
os.startfile(textfile.txt)

最外层的引号由python本身使用,而Windows shell则无法看到它,如上所述,Windows只理解双引号。 python在Windows上将正斜杠转换为反斜杠,因此你可以使用,


os.system('"C:/Temp/a b c/Notepad.exe"')

在Windows 7和Python 3.1中,如果命令路径中有空格,则Windows中的os system要用双引号引起来,例如:


 TheCommand = '""C:Tempa b cNotepad.exe""'
 os.system(TheCommand)


 TheCommand = '""C:Program FilesSunVirtualBoxVBoxManage.exe" ' 
 + ' clonehd"' + OrigFile + '""' + NewFile + '""'
 os.system(TheCommand)

...