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

2025-01-07 08:44:00
admin
原创
179
摘要:问题描述:我有一个 Python 脚本需要执行外部程序,但由于某种原因失败了。如果我有以下脚本:import os; os.system("C:\\Temp\\a b c\\Notepad.exe"); raw_input(); 然后失败并出现以下错误:'C:\Temp\a' 未被识别为内...

问题描述:

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

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

无论此处是否带有 Notepad 参数,它都会失败并显示错误消息

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


解决方案 1:

subprocess.call将避免处理各种 shell 的引用约定的问题。它接受列表,而不是字符串,因此参数更容易分隔。即

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

解决方案 2:

这是另一种不同的做法。

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

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

例子:

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

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

解决方案 3:

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

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

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

解决方案 4:

至少在 Windows 7 和 Python 3.1 中,如果命令路径中有空格, os.systemWindows 要求命令行使用双引号。例如:

  TheCommand = '\"\"C:\\Temp\\a b c\\Notepad.exe\"\"'
  os.system(TheCommand)

一个让我困惑的真实示例是在 VirtualBox 中克隆驱动器。subprocess.call由于某些访问权限问题,上述解决方案不起作用,但当我用双引号括住命令时,os.system就变得开心了:

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

解决方案 5:

对于 python >= 3.5subprocess.run应该使用subprocess.call

https://docs.python.org/3/library/subprocess.html#older-high-level-api

import subprocess
subprocess.run(['notepad.exe', 'test.txt'])

解决方案 6:

import win32api # if active state python is installed or install pywin32 package seperately

try: win32api.WinExec('NOTEPAD.exe') # Works seamlessly
except: pass

解决方案 7:

我怀疑这与在 Windows 中使用快捷方式时出现的问题相同...请尝试以下操作:

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

解决方案 8:

对于 Python 3.7,请使用subprocess.call。使用原始字符串简化 Windows 路径:

import subprocess
subprocess.call([r'C:TempExampleNotepad.exe', 'C:    est.txt'])

解决方案 9:

假设我们要运行你的 Django 网络服务器(在 Linux 中),并且你的路径(path= '/home/<you>/<first-path-section> <second-path-section>')之间存在空格,那么请执行以下操作:

import subprocess

args = ['{}/manage.py'.format('/home/<you>/<first-path-section> <second-path-section>'), 'runserver']
res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, error_ = res.communicate()

if not error_:
    print(output)
else:
    print(error_)

[笔记]:

  • 不要忘记访问权限:chmod 755 -R <'yor path'>

  • manage.py可执行:chmod +x manage.py

解决方案 10:

不需要子流程,只需通过以下方式即可实现

GitPath="C:\\Program Files\\Git\\git-bash.exe"# Application File Path in mycase its GITBASH
os.startfile(GitPath)
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2941  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1803  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   31  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   31  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   28  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用