如何从python调用shell脚本函数/变量?
有没有办法调用shell脚本并使用python脚本中定义的函数/变量 脚本是unix_shell.sh如何从python调用shell脚本函数/变量?,python,bash,Python,Bash,有没有办法调用shell脚本并使用python脚本中定义的函数/变量 脚本是unix_shell.sh #!/bin/bash function foo { ... } 可以从python调用这个函数foo吗 解决方案: 对于函数:将Shell函数转换为python函数 对于shell局部变量(非导出),在调用python脚本之前,在shell中运行此命令: 导出$(设置为| tr'\n'') 对于shell全局变量(从shell导出),在python中,您可以: 导入操作系统 打印操作系统环
#!/bin/bash
function foo
{
...
}
可以从python调用这个函数foo吗
解决方案:
导出$(设置为| tr'\n'')
不,那是不可能的。您可以执行一个shell脚本,在命令行上传递参数,然后它可以输出数据,您可以从Python解析数据 但这并不是真正调用函数。这仍然在使用选项执行bash,并在stdio上获得一个字符串
那可能是你想要的。但这可能不是正确的方法。Bash无法完成Python无法完成的许多事情。改为用Python实现该函数。是的,与从另一个bash脚本调用该函数的方式类似:
import subprocess
subprocess.check_output(['bash', '-c', 'source unix_shell.sh && foo'])
我对python不太了解,但是如果在shell脚本函数定义之后使用
export-f foo
,那么如果启动一个子bash,就可以调用该函数。如果没有导出
,则需要以的形式运行shell脚本。script.sh
在用python启动的子bash中,但它将运行其中的所有内容,并定义所有函数和所有变量。您可以将每个函数分离到它们自己的bash文件中。然后使用Python将正确的参数传递给每个单独的bash文件
这可能比自己用Python重新编写bash函数更容易
然后可以使用
import subprocess
subprocess.call(['bash', 'function1.sh'])
subprocess.call(['bash', 'function2.sh'])
# etc. etc.
您也可以使用子流程传递参数。这可以通过子流程完成。(至少这是我在搜索时想要做的) 像这样:
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'
在和的帮助下,我得出以下结论:
导入子流程
command='bash-c“source~/.fileContainingTheFunction&&theFunction”'
stdout=subprocess.getoutput(命令)
打印(标准输出)
我正在Ubuntu 18.04 LTS中使用Python 3.6.5。看看
子流程模块。这可能会有所帮助。这并不是真正调用函数。它执行bash。@LennartRegebro:我不明白在不执行某种级别的bash的情况下,如何执行bash函数……这是可能的,而且它可以工作(经过测试):