如何从python运行exe文件?

问题描述 投票:1回答:2

我尝试使用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应用程序

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

python subprocess os.system
2个回答
5
投票

问题是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


2
投票

您能看看是否行得通

   import os 

    # change the current directory 
    # to specified directory 
    os.chdir(r"C:\Users\User\AppData\Windows\Start Menu\Programs") 
    subprocess.Popen("file.exe")
© www.soinside.com 2019 - 2024. All rights reserved.