我有一个Python脚本,它需要执行一个外部程序,但是由于某种原因失败了。
如果我有以下脚本:
import os;
os.system("C:\\Temp\\a b c\\Notepad.exe");
raw_input();
然后失败,并出现以下错误:
'C:\Temp\a' is not recognized as an internal or external command, operable program or batch file.
如果我用引号转义程序:
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();
注意交换的单引号/双引号。
无论是否有记事本参数,它都会失败,并显示错误消息
The filename, directory name, or volume label syntax is incorrect.
^{} 将避免在处理各种shell的引用约定时出现问题。它接受一个列表,而不是一个字符串,因此参数更容易被分隔。i、 e
最外面的引号是由Python本身使用的,而Windows shell看不到它。如上所述,Windows只理解双引号。 Python将在Windows上将正斜杠转换为反斜杠,因此您可以使用
'被Python使用,然后Python将“C://Temp/abc/Notepad.exe”(作为Windows路径,不需要双反斜杠)传递给CMD.exe
这是另一种方法。
如果您使用的是Windows,则以下操作类似于双击资源管理器中的文件,或将文件名作为DOS“start”命令的参数:打开文件时,文件的扩展名与任何应用程序(如果有)关联。
示例:
如果记事本与.txt文件关联,则将使用记事本打开textfile.txt。
相关问题 更多 >
编程相关推荐