【问题标题】:How can I execute command line program with ./ via a Python script?如何通过 Python 脚本使用 ./ 执行命令行程序?
【发布时间】:2020-10-01 07:27:44
【问题描述】:

我在 ~/trevor 目录中有一个程序。使用 Ubuntu,如果我 cd 到这个目录,那么我可以执行这个程序 $./program

但是,我希望能够从 Python 脚本中执行该程序,但是当我尝试使用时

import subprocess.run
subprocess.run("./program")

我收到以下错误:

OSError: [WinError 193] %1 is not a valid Win32 application

我该如何解决这个问题?

我正在通过 Pycharm 的终端运行 python 脚本。我突然想到我可以通过 Ubuntu 的终端运行 python 脚本,但是我在 Ubuntu 找到正确的包时遇到了问题。我正在使用 Ubuntu shell 运行 Windows - 我尝试通过将 Ubuntu 的 PYTHONPATH 更改为与 Pycharm 的项目解释器相同的路径来解决 Ubuntu 包问题,但这也不起作用。我认为解决上述问题比解决包装问题更容易。

感谢您的帮助。

【问题讨论】:

  • 这不是 Ubuntu 错误,而是 Windows 错误。这显然不是 Python 的 Ubuntu 原生副本。在 Windows+Ubuntu 系统上使用 Linux 版本的 Python,而不是 Windows。
  • @CharlesDuffy 感谢您的评论。实际上,从我的 Ubunutu 终端运行 python 脚本可以解决 subprocess.run("./program") 问题,但问题仍然是我的 Linux shell 不知道在哪里可以找到我的 python 包,因此脚本的其余部分可以不要跑。我尝试将 PYTHONPATH 更改为似乎安装软件包的位置,尽管这似乎并未涵盖所有软件包,因此脚本仍然失败。有什么想法吗?
  • 任何包含(或引入包含)本机 C 模块的 Python 包,您需要安装两次,每个平台安装一次。我建议保留两个不同的虚拟环境。
  • 谢谢查尔斯,你是对的。我已经做到了,它有效。干杯!
  • 我正在将该解决方案从问题编辑转移到社区 wiki 答案,如 Meta Stack Exchange 帖子 What to do when OP answers his/her own question in an edit? 中所述。 (“社区 Wiki”意味着没有人从投票/接受中获得声誉积分,并且鼓励任何人/每个人进行编辑以改进答案)。这样,您就可以接受答案,从而将问题标记为已解决。

标签: python ubuntu subprocess executable pythonpath


【解决方案1】:

作为previously discussed in comments,然后包含在edit to the question中:

错误是尝试通过 Windows 命令行执行 Ubuntu 程序。这里的解决方案是通过 Ubuntu 命令行执行 Python 脚本(使用subprocess.run()subprocess.call())。

就在 Ubuntu 上执行 Python 找不到 Python 包/模块而言,这是因为这些包/模块是通过 Windows 命令行安装的,因此它们包含的本机/编译依赖项是为 Windows 而不是为 Ubuntu 构建的。即使 Ubuntu 的 PYTHONPATH 指向包的位置,也有一些模块无法工作,因为它们具有平台原生组件。解决方案是通过 Ubunutu 再次下载该软件包(这样它们就适用于 Linux 发行版)。

【讨论】:

    【解决方案2】:

    os.exec* 据我所知,通常适用于 windows 和 linux,但是在某些情况下它确实需要一个或两个字母来替换“*”。你必须看看这个,看看你需要哪一个https://docs.python.org/2/library/os.html 前任。 os.execl 或 os.execle

    subprocess.call 是一个较旧的版本,它将避免许多与特定于 shell 的约定有关的问题。如果问题是上面评论所暗示的 Ubuntu-nativity,这可以解决它。

    【讨论】:

    • 所有这些都在下面运行相同的系统调用,因此在尝试为不同平台调用二进制文件时容易出现相同的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多