python - 如何从python运行exe文件?

标签 python python-3.x subprocess os.system

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

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

file.exe 位于“programs”目录下。

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

错误:

{OSError}[WinError 193] %1 is not a valid Win32 application

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

最佳答案

问题是 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.execurrent_dir 中(除非您设置 shell=True,但最好避免出于安全/便携性原因也是如此)

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

关于python - 如何从python运行exe文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697911/

相关文章:

python - 在命令行中终止python for循环程序而不关闭它?

python-3.x - 如何从python3中的每行读取起始N个单词

Python Selenium,帮助我定位网站中的元素

python - 检测程序名称 Python 3

Java 应用程序权限

python - 创建 Pandas DataFrame 时跳过具有更多列的项目

Python 在 nltk.tree 中定位单词

python - 在不移动位置的情况下重用 matplotlib 中的补丁对象

python - 从 pandas 数据帧创建自定义热图

python - 子进程 popen stdout 锁定?