通过子流程将参数传递给bash脚本

时间:2020-03-08 19:38:56

标签: python bash

我正在尝试将参数从python传递到bash脚本。官方文档说您需要用逗号分隔,但我正在使用它,但它不起作用。

subprocess.run(["/bin/bash test.sh", "hello", "dog", "3" ], shell=True)

在bash脚本中,我有以下基本代码:

echo "The number of arguments is: $#"

结果是:参数个数是:0

有什么建议吗?我决定将它作为字符串传递(不是很干净),并在空格处添加““ +” hello“ +” dog“ +” 3“

此致

1 个答案:

答案 0 :(得分:3)

您有两个选择。

  1. 使用参数列表但不使用shell=True来调用它:

    subprocess.run(["/bin/bash", "test.sh", "hello", "dog", "3" ])
    
  2. 使用shell=True传递单个字符串:

    subprocess.run("/bin/bash test.sh hello dog 3", shell=True)
    

来自docs of subprocess

在带有shell=True的POSIX上,shell默认为/bin/sh。如果 args 是字符串,则该字符串指定要通过外壳执行的命令。这意味着该字符串的格式必须与在shell提示符下键入时的格式完全相同。例如,这包括在文件名中使用引号或反斜杠转义。如果 args 是一个序列,则第一项指定命令字符串,任何其他项都将被视为shell本身的其他参数。

有关shell标志的更多信息:Actual meaning of 'shell=True' in subprocess