如何从Python运行exe文件?

2024-02-08

我尝试使用 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")

Error:

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

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


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

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

如果您想在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用字符串文字,因此始终使用r前缀以避免一些\t or \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 is in current_dir(除非你设置shell=True,但出于安全/可移植性原因,最好也避免这种情况)

注意os.system由于很多(好的)原因而被弃用。使用subprocess模块,always,如果有争论,总是有争论list(不是字符串),并避免shell=True越多越好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从Python运行exe文件? 的相关文章

随机推荐