如何从python调用shell脚本函数/变量?

时间:2013-04-16 20:49:01

标签: python bash

有没有办法调用shell脚本并使用python脚本中定义的函数/变量?

脚本是unix_shell.sh

#!/bin/bash
function foo
{
...
}

是否可以从python中调用此函数foo?

解决方案:

  1. 对于函数:将Shell函数转换为python函数
  2. 对于shell局部变量(非导出),在调用python脚本之前在shell中运行此命令:
    export $(set | tr'\ n''')

  3. 对于shell全局变量(从shell导出),在python中,您可以: 进口口 print os.environ [“VAR1”]

6 个答案:

答案 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 answerthis answer,我想到了这一点:

import subprocess
command = 'bash -c "source ~/.fileContainingTheFunction && theFunction"'
stdout = subprocess.getoutput(command)
print(stdout)

我正在Ubuntu 18.04 LTS中使用Python 3.6.5。