有没有办法调用shell脚本并使用python脚本中定义的函数/变量?
脚本是unix_shell.sh
#!/bin/bash
function foo
{
...
}
是否可以从python中调用此函数foo?
解决方案:
对于shell局部变量(非导出),在调用python脚本之前在shell中运行此命令:
export $(set | tr'\ n''')
对于shell全局变量(从shell导出),在python中,您可以: 进口口 print os.environ [“VAR1”]
答案 0 :(得分:2)
是的,与你从另一个bash脚本调用它的方式类似:
import subprocess
subprocess.check_output(['bash', '-c', 'source unix_shell.sh && foo'])
答案 1 :(得分:1)
不,那是不可能的。你可以执行一个shell脚本,在命令行上传递参数,它可以打印出你可以从Python解析的数据。
但那并不是调用这个功能。那仍在使用选项执行bash并在stdio上返回一个字符串。
那可能会做你想要的。但它可能不是正确的方法。 Bash无法做那些Python无法做到的事情。用Python实现函数。
答案 2 :(得分:1)
这可以通过子过程来完成。 (至少这是我在搜索时试图做的事情)
像这样:
output = subprocess.check_output(['bash', '-c', 'source utility_functions.sh; get_new_value 5'])
utility_functions.sh如下所示:
#!/bin/bash
function get_new_value
{
let "new_value=$1 * $1"
echo $new_value
}
这就是它的运作方式...
>>> import subprocess
>>> output = subprocess.check_output(['bash', '-c', 'source utility_functions.sh; get_new_value 5'])
>>> print(output)
b'25\n'
答案 3 :(得分:0)
我不太了解python,但是如果你在shell脚本函数定义之后使用export -f foo
,那么如果你启动一个子bash,可以调用该函数。如果没有export
,你需要在python中启动的子bash中运行shell脚本. script.sh
,但是它将运行其中的所有内容并定义所有函数和所有变量。
答案 4 :(得分:0)
您可以将每个函数分成自己的bash文件。然后使用Python将正确的参数传递给每个单独的bash文件。
这可能比仅仅用Python重写bash函数更容易。
然后,您可以使用
调用这些函数import subprocess
subprocess.call(['bash', 'function1.sh'])
subprocess.call(['bash', 'function2.sh'])
# etc. etc.
您也可以使用子流程传递参数。
答案 5 :(得分:0)
借助above answer和this answer,我想到了这一点:
import subprocess
command = 'bash -c "source ~/.fileContainingTheFunction && theFunction"'
stdout = subprocess.getoutput(command)
print(stdout)
我正在Ubuntu 18.04 LTS中使用Python 3.6.5。