首页 > 解决方案 > 尝试从 Python3 子进程中执行 Python2 二进制文件时出错

问题描述

我正在尝试执行我的 Python3 脚本,该脚本调用具有 python2.7 lib 文件依赖项的 python 二进制文件。这个二进制文件很老了,不是我的,试图把它带入 Python3 是一项艰巨的任务。

我的系统构建是运行 Ubuntu WSL 的 Win10。我在 Ubuntu WSL 中执行我的 puthon3 代码,所以我直接在 Linux 终端上执行非常重要。

手动在终端上,我可以通过为 python2 创建一个虚拟环境并执行二进制文件来使二进制文件正常工作:

source ../martini_3.0.b.3.2/PythonCrisis/bin/activate
../martini_3.0.b.3.2/martinize -h
deactivate

我决定把它放在一个 shell (.sh) 文件(inc.#!/bin/bash)中并从 Ubuntu 终端执行它。完全没有问题。但是,我想采取这一步并从 Python3 脚本中执行它。

不幸的是,我遇到了一些问题。我的 Python 3 代码如下所示:

import subprocess

result = subprocess.run(["/home/ubuntu/DE_NOVO_PROTEINS/SCRIPTS/martini_shell.sh"], capture_output=True, text=True)
print("stdout", result.stdout)
print("stderr", result.stderr)

我得到以下信息:

stdout
stderr /home/ubuntu/DE_NOVO_PROTEINS/SCRIPTS/martini_shell.sh: 3: source: not found
Traceback (most recent call last):
  File "/home/ubuntu/miniconda3/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/ubuntu/miniconda3/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "../martini_3.0.b.3.2/martinize/__main__.py", line 3, in <module>
  File "<frozen zipimport>", line 259, in load_module
  File "../martini_3.0.b.3.2/martinize/martinize/__init__.py", line 37, in <module>
ModuleNotFoundError: No module named 'core'
DeprecationWarning: 'source deactivate' is deprecated. Use 'conda deactivate'.

首先,看起来没有找到 shell 脚本。但是,我怀疑它比这要复杂一些(鉴于该文件确实存在)。非常感谢您的建议。

编辑 首先,我想强调我不是在尝试运行 python2 解释器。我没有执行 python2 代码。我正在执行一个依赖于 python2.7 库的二进制文件。

解决 了我解决了。我只需要将 #!/bin/sh 更改为 #!/bin/bash

标签: pythonpython-3.xpython-2.7

解决方案


根据我的编辑:我只需要将 #!/bin/sh 更改为 #!/bin/bash


推荐阅读