假设我有一个 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 指出的那样,这不是一个好主意。
添加回答
举报
0/150
提交
取消