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

我有一个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();

注意单/双引号的对调。

无论这里是否有记事本的参数,它都会失败,错误信息如下

文件名、目录名或卷标的语法不正确。

解决办法

subprocess.call 将避免处理不同shell的引号惯例的问题。它接受一个列表,而不是一个字符串,所以参数更容易划定。

import subprocess
subprocess.call(['C:\\Temp\\a b c\\Notepad.exe', 'C:\\test.txt'])
评论(9)

这里有一个不同的方法。

如果你使用的是Windows系统,下面的操作就像在资源管理器中双击文件,或将文件名作为DOS的"start"命令的参数:文件会以其扩展名相关的任何应用程序(如果有的话)打开。

filepath = 'textfile.txt'
import os
os.startfile(filepath)

例子。

import os
os.startfile('textfile.txt')

如果记事本与.txt文件有关联,这将用记事本打开textfile.txt。

评论(3)

我怀疑这与你在Windows中使用快捷方式时的问题相同......。试试这个。

import os;
os.system("\"C:\\Temp\\a b c\\Notepad.exe\" C:\\test.txt");
评论(4)