如何从python运行exe文件?

新手上路,请多包涵

我尝试使用 os.system 库从本地 python 项目中的特定路径运行一个 exe(在后台)。我已经设法更改文件夹,如“cd”命令,但我无法运行该文件。

这是一个在 Windows 64BIT,Python 3.5.3 上运行的 python 项目

file.exe 位于“程序”目录中。

 import os
os.system("cd C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")

错误:

{OSError}[WinError 193] %1 不是有效的 Win32 应用程序

我看到了关于这个问题的其他帖子,但我无法解决它。有任何想法吗?

原文由 Moshe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

问题解决了。谢谢大家,问题是管理权限。以管理员身份启动 pycharm。就像我说的那样 - 我能够使用 os.listdir() 查看文件,但是当我尝试运行它时,错误开始弹出。我认为主要问题是 os.system() 从 python 进程继承当前特权。

原文由 Moshe 发布,翻译遵循 CC BY-SA 4.0 许可协议

问题是 system 命令不起作用。它“有效”,但在一个单独的子进程中立即退出。当前目录不会传播到调用进程(另外,由于您没有检查返回码,即使目录不存在,命令也不会失败。请注意,它发生在这里,因为目录名称有其中有空格并且没有被引用…)。

您必须为此使用 os.chdir ,但您甚至不需要它。

如果要在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用字符串文字,请始终使用 r 前缀以避免某些 \t\n 字符被解释为特殊字符…)。例如在 python 3 中,命令行提供了一个错误(但在 python 2 中没问题…):

 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \UXXXXXXXX escape

所以总是使用原始前缀。以下是我将如何重写:

 current_dir = r"C:\Users\User\AppData\Windows\Start Menu\Programs"
subprocess.Popen(os.path.join(current_dir,"file.exe"))

如果您确实需要当前目录与 exe 相同,请使用 cwd 参数。还获取 Popen 的返回值,以便能够等待/轮询/杀死/无论什么并获取命令退出代码:

 p = subprocess.Popen(os.path.join(current_dir,"file.exe"),cwd=current_dir)
# ...
return_code = p.wait()

作为旁注,请注意:

 p = subprocess.Popen("file.exe",cwd=current_dir)

不起作用,即使 file.exe 位于 current_dir (除非你设置 shell=True 出于安全/可移植性的原因更好地避免),但它是

请注意 os.system 由于很多(好的)原因而被弃用。 始终 使用 subprocess 模块,如果有参数,则始终使用参数 _列表_(不是字符串),并尽可能避免 shell=True

原文由 Jean-François Fabre 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题