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

2024-04-20 11:04:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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.


Tags: orimport程序脚本input参数rawis
3条回答

^{}将避免在处理各种shell的引用约定时出现问题。它接受一个列表,而不是一个字符串,因此参数更容易被分隔。i、 e

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

最外面的引号是由Python本身使用的,而Windows shell看不到它。如上所述,Windows只理解双引号。 Python将在Windows上将正斜杠转换为反斜杠,因此您可以使用

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

'被Python使用,然后Python将“C://Temp/abc/Notepad.exe”(作为Windows路径,不需要双反斜杠)传递给CMD.exe

这是另一种方法。

如果您使用的是Windows,则以下操作类似于双击资源管理器中的文件,或将文件名作为DOS“start”命令的参数:打开文件时,文件的扩展名与任何应用程序(如果有)关联。

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

示例:

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

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

相关问题 更多 >