猿问

我们如何从python调用bash函数

假设我有一个 bash 函数,我将它输入到 shell 中。


# cat sample.sh 

function func()

{

    echo "Custom env : $CUSTOM_ENV"

}

现在我在 bash shell 中获取这个脚本: #source sample.sh


然后我定义:


export CUSTOM_ENV="abc"

然后从 bash shell 调用 func(),它显示:


#func

Custom env : abc

现在,如果我从同一个 shell 调用 python 脚本,我想从 python 脚本调用函数 func() 。无论如何要实现这一目标?


我试过的:


试过 os.system('func') - 不起作用

试过 subprocess.check_output('func', shell=True, env=os.environ.copy()) - 不起作用

任何指导?


慕容3067478
浏览 210回答 3
3回答

收到一只叮咚

您需要export该功能(带有-f选项):$ function func()> {>     echo "Custom env : $CUSTOM_ENV"> }$ export -f func$ export CUSTOM_ENV="abc"$ pythonPython 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 darwinType "help", "copyright", "credits" or "license" for more information.>>> import os>>> os.system('func')Custom env : abc0请注意,exporting 函数(和变量)会将函数和变量的副本导出到它们从中导出的 shell 的子进程。它们在父(或兄弟)进程中不可用。此外,在子流程中更改它们不会影响原始副本。此外,导出函数是仅用于 bash 的事情,因此这仅在父 shell 和从 python 启动的 shell 都是 bash 时才有效。在 bash 不是默认值的操作系统上(例如最近发布的 Ubuntu 和 Debian),您需要明确运行 bash,否则它将无法运行。这一切使它变得相当脆弱,正如@triplee 指出的那样,这不是一个好主意。
随时随地看视频慕课网APP

相关分类

Python
我要回答