为了账号安全,请及时绑定邮箱和手机立即绑定

我们如何从python调用bash函数

我们如何从python调用bash函数

慕容3067478 2021-09-11 20:08:35
假设我有一个 bash 函数,我将它输入到 shell 中。# cat sample.sh function func(){    echo "Custom env : $CUSTOM_ENV"}现在我在 bash shell 中获取这个脚本: #source sample.sh然后我定义:export CUSTOM_ENV="abc"然后从 bash shell 调用 func(),它显示:#funcCustom env : abc现在,如果我从同一个 shell 调用 python 脚本,我想从 python 脚本调用函数 func() 。无论如何要实现这一目标?我试过的:试过 os.system('func') - 不起作用试过 subprocess.check_output('func', shell=True, env=os.environ.copy()) - 不起作用任何指导?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您需要export该功能(带有-f选项):


$ function func()

> {

>     echo "Custom env : $CUSTOM_ENV"

> }

$ export -f func

$ export CUSTOM_ENV="abc"

$ python

Python 2.7.10 (default, Oct  6 2017, 22:29:07) 

[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import os

>>> os.system('func')

Custom env : abc

0

请注意,exporting 函数(和变量)会将函数和变量的副本导出到它们从中导出的 shell 的子进程。它们在父(或兄弟)进程中不可用。此外,在子流程中更改它们不会影响原始副本。


此外,导出函数是仅用于 bash 的事情,因此这仅在父 shell 和从 python 启动的 shell 都是 bash 时才有效。在 bash 不是默认值的操作系统上(例如最近发布的 Ubuntu 和 Debian),您需要明确运行 bash,否则它将无法运行。这一切使它变得相当脆弱,正如@triplee 指出的那样,这不是一个好主意。


查看完整回答
反对 回复 2021-09-11
  • 3 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信