【问题标题】:How to run exe file from python?如何从python运行exe文件?
【发布时间】:2020-03-01 00:49:14
【问题描述】:

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

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

【问题讨论】:

  • 你试过os.system("./file.exe")吗?
  • 我可能错了,但我认为使用os.system 调用更改目录只会更改该调用的目录。打开一个外壳,执行命令,然后关闭外壳。改用os.chdir 来更改脚本工作目录。
  • @SyntaxVoid 它对我有用。 os.system() 也改变了下一个命令的路径
  • @Moshe,很奇怪。这不是它在我的机器上的作用方式,即使我以管理员身份运行 python os.getcwd(); os.system("cd Desktop"); os.getcwd() 将显示相同的目录并且不会发生任何更改。无论我是在交互式 python shell 中,还是运行 .py 文件,都会发生这种情况。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题是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模块,always,如果有参数,总是带参数list(不是字符串),尽量避免shell=True。 p>

    【讨论】:

      【解决方案3】:

      你能看看这是否有效

         import os 
      
          # change the current directory 
          # to specified directory 
          os.chdir(r"C:\Users\User\AppData\Windows\Start Menu\Programs") 
          subprocess.Popen("file.exe")
      

      【讨论】:

      • 不工作,由于某种原因我无法从 python 访问文件。虽然我在 os.listdir() 中看到它
      猜你喜欢
      • 2021-06-12
      • 2017-10-15
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多