如何将存在于变量中的shell脚本传递给函数

时间:2015-08-25 23:45:34

标签: python

我正在尝试将一系列shell脚本命令传递给python函数。

我曾经在子进程中调用script.sh文件,但现在我想在函数中使用脚本本身,所以我不必担心尾随脚本。

过于简单的例子来提出一个想法:

def myfunc()
    script = "ls -la; cd /; ls -la"
    runscript_output = subprocess.call(script)
    print runscript_output

这是正确的方法吗?

我看到了一些shell命令包装在EOF包装器中的例子;虽然我不确定为什么。

1 个答案:

答案 0 :(得分:0)

在此用例中使用shell=True。另外,我强烈建议让脚本文本保持不变,并将任何变量替换作为单独的参数:

script_text=r'''
ls -la
cd "$1" || exit
ls -la
'''

# for /bin/sh
def myfunc_sh():
    runscript_output = subprocess.check_output(
        [script_text,       # /bin/sh script text here
         '/'],              # add values for $1 and on as list elements
        shell=True)
    print runscript_output

# for /bin/bash
def myfunc_bash():
    runscript_output = subprocess.check_output(
        ['bash',            # interpreter to run
         '-c', script_text, # script to invoke
         '_',               # value for $0
         '/'])              # add values for $1 and on as extra list elements here
    print runscript_output

遵循这种做法 - 将内容作为脚本文本保持传递给shell常量 - 避免打开shell注入漏洞,其中数据被解析为代码。