python - 尝试从 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
解决方案
根据我的编辑:我只需要将 #!/bin/sh 更改为 #!/bin/bash
推荐阅读
- thumbor - 如何使用拇指从文件夹本地加载图像
- c# - 在满足预期条件后执行一些操作
- azure - Azure 活动日志
- ios - Swift 5 Xcode 10.3 如何设置背景透明
- javascript - 如何生成我进入表格的 json 响应?
- java - 在 Webview 中调用 onBackPressed 方法时,它会停止缓存
- python - 如何在熊猫的同一条船上获得连续安装的最旧部分安装?
- c# - 由于简单的类变体而导致的继承/组合
- python - 如何使用 numpy.repeat 构建一个数组,其中每个元素比前一个元素高 1%?
- javascript - 如何在反应本机日历中设置多个选定的日期颜色?