python-3.x - 为什么我不能在 python3 子进程中使用导出的 bash 函数?
问题描述
如果我在 bash shell 中运行以下命令:
function tempE(){ echo "This is tempE"; }
export -f tempE
python3 -c "import subprocess as sp; print(sp.run(['tempE'],capture_output=True).stdout.decode('utf8'));"
...然后我希望收到消息“这是 tempE”。相反,我收到一个 python3 错误堆栈,抱怨它找不到tempE
. 但我认为这个 python3 进程可以tempE
通过export -f tempE
.
我有什么误解?
解决方案
shell的功能是由shell实现的,所以需要通过shell来执行命令。默认情况下subprocess.run()
直接执行程序,所以使用shell=True
使其使用shell。
此外,导出的函数是一个bash
扩展,但默认subprocess.run()
使用sh
。用于executable='/bin/bash'
覆盖它。
python3 -c "import subprocess as sp; print(sp.run('tempE', shell=True, executable = '/bin/bash', capture_output=True).stdout.decode('utf8'));"
推荐阅读
- javascript - 我想使用 jquery 从数据库中选择值并在同一页面上返回
- python - 从数据框中包含的列表中将列动态添加到 pandas 数据框
- python - Python - 避免保存 0 字节的文件?
- javascript - 有没有办法切换 setInterval
- angular - 使用 Angular CLI 的“ng e2e”时,是否可以让 Protractor 使用 Jasmine 3.5?或者使用 ng e2e 快速失败
- xaml - Xamarin.Forms DynamicResource 似乎没有工作
- android - 在应用安装期间获取所有权限
- windows - 如何在 Windows 的 conda 终端提示符中显示 git 分支?
- fipy - 运行“examples.diffusion.mesh20x20”时出现 ValueError
- java - 使用 batchUpdate 时 NamedParameterJdbcTemplate 未更新