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

25 浏览
0 Comments

如何从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();

注意单引号和双引号的交换。

在这里无论是否带参数到记事本,它都会失败并显示以下错误信息:

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

admin 更改状态以发布 2023年5月20日
0
0 Comments

这是另一种处理它的方式。

如果你在使用Windows,以下方法就像在资源管理器中双击文件或将文件名作为DOS“start”命令的参数:文件将使用其扩展名关联的应用程序(如果有)打开。

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

例如:

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

如果记事本与.txt文件相关联,则将使用记事本打开textfile.txt。

0
0 Comments

subprocess.call会避免不同的shell引号使用规则的问题。它接受一个列表,而不是字符串,因此参数更容易被定界。例如:

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

0