我尝试使用 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.exe
在 current_dir
中(除非您设置 shell=True
,但最好避免出于安全/便携性原因也是如此)
请注意,os.system
已被弃用,原因有很多(好的)。使用 subprocess
模块,始终,如果有参数,则始终使用参数 list(不是字符串),并避免 shell=尽可能真实
。
关于python - 如何从python运行exe文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58697911/