【问题标题】:Python: subprocess and running a bash script with multiple argumentsPython:子进程并运行具有多个参数的 bash 脚本
【发布时间】:2013-06-19 00:47:11
【问题描述】:

如何使用 subprocess 模块运行 bash 脚本,我必须为其提供几个参数?

这是我目前正在使用的:

subprocess.Popen(['/my/file/path/programname.sh', 'arg1 arg2 %s' % arg3], \
    shell = True)

bash 脚本似乎没有接受任何参数。非常感谢任何见解!

【问题讨论】:

    标签: python bash arguments subprocess popen


    【解决方案1】:

    将参数作为列表传递,参见the very first code example in the docs:

    import subprocess
    
    subprocess.check_call(['/my/file/path/programname.sh', 'arg1', 'arg2', arg3])
    

    如果arg3 不是字符串;在传递给check_call()之前将其转换为字符串:arg3 = str(arg3)

    【讨论】:

    • 如果我所有的args都是变量,我不把它们设置成字符串吗?
    • @user2510173:我不明白这个问题。下面是一个例子:arg3 = 1,要转换它,你可以调用返回'1'str(arg3)
    • 不幸的是,代码中的示例没有回答原始问题,因为他们选择了一个只有一个参数的过于简单的情况。目前尚不清楚多个参数是否应该作为单个字符串或多个字符串传递,除非您仔细阅读该页面以了解 POpen 背后的详细信息。即使这样,它也只是说,“通常首选提供一系列参数” - 而不是“您必须提供多个参数作为列表”
    • @SteveBroberg:你的意思是Python官方文档中的例子吗?您可以在bugs.python.org 将其作为文档错误报告(patches are welcome,但指出可能存在的问题的简单报告也很有用)。
    【解决方案2】:
    subprocess.Popen(['/my/file/path/programname.sh arg1 arg2 %s' % arg3], shell = True).
    

    如果您使用shell = True,则脚本及其参数必须作为字符串传递。 args 序列中的任何其他元素都将被视为 shell 的参数。

    您可以在 http://docs.python.org/2/library/subprocess.html#subprocess.Popen 找到完整的文档。

    【讨论】:

      【解决方案3】:

      再举一个例子,上面所有的都没有,

      subprocess.Popen(['/your/script.sh %s %s %s' %(argument1,argument2,argument3)], shell = True)

      请注意,当您输入%(argument1,argument2,argument3) 时,%( 之间不应有任何空格,例如% (argument1,argument2,argument3) 无效。

      【讨论】:

        【解决方案4】:

        您好,我知道这个解决方案已经很晚了,但可以帮助某人。

        示例:

        import subprocess
        pass_arg=[]
        pass_arg[0]="/home/test.sh"
        pass_arg[1]="arg1"
        pass_arg[2]="arg2"
        
        subprocess.check_call(pass_arg)
        

        上面的例子提供了 arg1 和 arg2 作为参数给 shell 脚本 test.sh

        本质上,子进程需要一个数组。因此,您可以填充一个数组并将其作为参数提供。

        【讨论】:

          【解决方案5】:

          您忘记添加args 名称。

          subprocess.Popen(args=['./test.sh', 'arg1 arg2 %s' % arg3], shell=True)
          

          【讨论】:

          • 所以文件路径也需要在 args 集中?
          猜你喜欢
          • 2016-09-27
          • 2020-11-22
          • 2021-11-30
          • 2023-03-07
          • 2021-05-25
          • 1970-01-01
          • 2017-12-12
          • 1970-01-01
          • 2012-11-21
          相关资源
          最近更新 更多