如何从python运行exe文件?

时间:2019-11-04 16:56:36

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

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

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

3 个答案:

答案 0 :(得分:6)

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

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

如果您想在特定位置运行命令,只需传递命令的绝对路径(并且由于它使用的是字符串文字,请始终使用r前缀来避免使用某些\t或{ {1}}字符被解释为特殊字符...)。例如,对于python 3,在提供命令行的情况下会出现错误(但是在python 2中可以...):

\n

因此,请始终使用原始前缀。这是我要重写的方式:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \UXXXXXXXX escape

如果确实需要当前目录与exe相同,请使用current_dir = r"C:\Users\User\AppData\Windows\Start Menu\Programs" subprocess.Popen(os.path.join(current_dir,"file.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模块,始终 ,如果有参数,请始终使用参数 list (不是字符串),并尽量避免使用subprocess可能。

答案 1 :(得分: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")

答案 2 :(得分:0)

问题解决了。 谢谢大家,问题是管理权限。.以管理员身份开始pycharm。 就像我说的那样-我能够通过os.listdir()看到文件,但是当我尝试运行它时,错误开始弹出。 我认为主要问题是os.system()从python进程继承当前权限。