我正在尝试将一系列shell脚本命令传递给python函数。
我曾经在子进程中调用script.sh文件,但现在我想在函数中使用脚本本身,所以我不必担心尾随脚本。
过于简单的例子来提出一个想法:
def myfunc()
script = "ls -la; cd /; ls -la"
runscript_output = subprocess.call(script)
print runscript_output
这是正确的方法吗?
我看到了一些shell命令包装在EOF包装器中的例子;虽然我不确定为什么。
答案 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注入漏洞,其中数据被解析为代码。