我正在尝试将参数从python传递到bash脚本。官方文档说您需要用逗号分隔,但我正在使用它,但它不起作用。
subprocess.run(["/bin/bash test.sh", "hello", "dog", "3" ], shell=True)
在bash脚本中,我有以下基本代码:
echo "The number of arguments is: $#"
结果是:参数个数是:0
有什么建议吗?我决定将它作为字符串传递(不是很干净),并在空格处添加““ +” hello“ +” dog“ +” 3“
此致
答案 0 :(得分:3)
您有两个选择。
使用参数列表但不使用shell=True
来调用它:
subprocess.run(["/bin/bash", "test.sh", "hello", "dog", "3" ])
使用shell=True
传递单个字符串:
subprocess.run("/bin/bash test.sh hello dog 3", shell=True)
在带有
shell=True
的POSIX上,shell默认为/bin/sh
。如果 args 是字符串,则该字符串指定要通过外壳执行的命令。这意味着该字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括在文件名中使用引号或反斜杠转义。如果 args 是一个序列,则第一项指定命令字符串,任何其他项都将被视为shell本身的其他参数。
有关shell
标志的更多信息:Actual meaning of 'shell=True' in subprocess