python删除空格时为什么执行不出来_如何从python执行程序? 由于path中的空格,os.system失败...

如何从python执行程序? 由于path中的空格,os.system失败

我有一个python脚本需要执行一个外部程序,但由于某种原因失败。

如果我有以下脚本:

import os; os.system("C:\\Temp\\abc\\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\\abc\\Notepad.exe"'); raw_input();

然后它工作。 但是,如果我添加一个参数,它会停止工作:

import os; os.system('"C:\\Temp\\abc\\Notepad.exe" "C:\\test.txt"'); raw_input();

执行程序并等待它完成的正确方法是什么? 我不需要从它读取输出,因为它是一个可视化程序,可以完成一项工作然后退出,但是我需要等待它完成。

另外请注意,将程序移动到非间隔path也不是一个选项。

编辑这不工作:

import os; os.system("'C:\\Temp\\abc\\Notepad.exe'"); raw_input();

请注意交换的单/双引号。

有或没有参数在这里记事,它失败,错误信息

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

subprocess.call将避免不得不处理各种shell的引用约定的问题。 它接受一个列表,而不是一个string,所以参数更容易分隔。 即

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

这是一个不同的方式。

如果你正在使用windows,下面的行为就像在资源pipe理器中双击文件,或者把文件名作为DOS“start”命令的一个参数:文件被打开,任何应用程序(如果有的话)的扩展都是关联的。

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

例:

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

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

最外层的引号是由Python本身消耗的,而Windowsshell没有看到它。 如上所述,Windows只能理解双引号。 Python会在Windows上正向转换为反斜杠,所以你可以使用

os.system('"C://Temp/abc/Notepad.exe"')

该'是由Python使用,然后通过“C://Temp/abc/Notepad.exe”(作为一个Windowspath,不需要双反斜杠)到CMD.EXE

至less在Windows 7和Python 3.1中,如果命令的path中有空格,则Windows中的os.system 双引号的命令行。 例如:

TheCommand = '\"\"C:\\Temp\\abc\\Notepad.exe\"\"' os.system(TheCommand)

一个真实世界的例子就是在VirtualBox中克隆一个驱动器。 上面的subprocess.call解决scheme由于某些访问权限问题而不起作用,但是当我双引号的时候, os.system变得很开心:

TheCommand = '\"\"C:\\Program Files\\Sun\\VirtualBox\\VBoxManage.exe\" ' \ + ' clonehd \"' + OrigFile + '\" \"' + NewFile + '\"\"' os.system(TheCommand)

import win32api # if active state python is installed or install pywin32 package seperately try: win32api.WinExec('NOTEPAD.exe') # Works seamlessly except: pass

我怀疑这是当你在Windows中使用快捷方式相同的问题…试试这个:

import os; os.system("\"C:\\Temp\\abc\\Notepad.exe\" C:\\test.txt");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`os.system()` 是一个在 Python 使用的函数,用于在后台执行外部命令或程序。它可以接收一个字符串参数,这个参数应该是需要执行的命令行指令。如果你提供的字符串包含空格,那么你需要确保这些空格能够被适当处理,以便 `os.system()` 正确地解释和执行命令。 ### 示例一:简单命令 假设你想执行一个命令,比如打开终端窗口或运行某个脚本。在这种情况下,`os.system()` 需要直接接收这个命令字符串,其包括空格: ```python import os # 打开终端窗口 os.system("start cmd") ``` 在这段代码,“start cmd”是一个包含了空格的命令字符串。Windows 系统下使用“start”,Unix 和 MacOS 下则使用“open”。 ### 示例二:复杂命令 如果你想执行一个包含参数的命令,同样需要用空格分隔参数: ```python import os # 启动一个Python脚本 script_path = "./my_script.py" os.system(f"python {script_path}") ``` 这里使用了格式化字符串的方式(f-string),在字符串使用 `{}` 来引用变量。这种方式使得在字符串嵌入动态值更为安全、易读。 ### 注意事项: 1. **双引号与单引号**:在 Windows 上,通常使用双引号包围整个命令,包括命令和参数,以防命令的特殊字符被解释器误解。例如: ```python os.system('"cmd /c start python my_script.py"') ``` 2. **转义字符**:在某些情况下,需要转义空格或命令的特殊字符,确保 `os.system()` 能够按原样执行命令。 3. **权限问题**:在某些环境下,运行外部命令可能会遇到权限问题。确保用户有足够的权利执行指定的命令。 4. **跨平台兼容性**:确保你的命令在所有目标平台上都能正常工作。例如,在 Linux/MacOS 上,启动命令可能是 `bash -c "your_command"`。 ### 使用场景 - 当你希望外部程序执行一些特定的任务,比如启动服务、运行脚本或执行测试,使用 `os.system()` 是一种方便的方法。 - 另一方面,对于更复杂的任务管理或者依赖环境变量的情况,考虑使用 `subprocess` 模块可能更为合适,因为它提供了更多的控制选项和错误处理机制。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值