我尝试使用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应用程序
我看到了有关此问题的其他帖子,但无法解决。有什么想法吗?
问题是system
命令不起作用。它“起作用”,但是在一个单独的子过程中立即退出。当前目录不会传播到调用过程(另外,由于您没有检查返回码,即使目录不存在,该命令也不会失败)。
您必须为此使用os.chdir
,但您甚至不需要它。
[如果要在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用的是字符串文字,请始终使用r
前缀以避免某些\t
或\n
字符被解释作为特殊字符...)。
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
模块,always,如果有参数,请始终使用参数list(不是字符串),并尽可能避免使用shell=True
。
您能看看是否行得通
import os
# change the current directory
# to specified directory
os.chdir(r"C:\Users\User\AppData\Windows\Start Menu\Programs")
subprocess.Popen("file.exe")