子进程使用两种方式,但结果不一样

时间:2015-11-27 10:59:34

标签: python python-2.7 subprocess

我用subprocess的{​​{1}}函数两种方式,发现结果不同,我不知道为什么。

  1. 第一种方式:

    check_output()
  2. 第二种方式:

    from subprocess import check_output as qc
    output = qc(['exit', '1'], shell=True)
    
  3. 错误:

    from subprocess import check_output as qc
    output = qc(['exit 1'], shell=True)
    

    第二种方式是正确的,但第一种方式为什么不对?

1 个答案:

答案 0 :(得分:1)

引用subprocess docs

  所有调用都需要

args ,而应该是字符串或序列   程序参数。通常提供一系列论证   首选,因为它允许模块处理任何所需的   转义和引用参数(例如,允许文件中的空格   名)。 如果传递单个字符串,则任何一个shell都必须为True(请参阅   或者字符串必须简单地命名要执行的程序   没有指定任何参数。

在每种情况下你实际做的是:

  1. 您传递了一系列参数:['exit', '1']。 Sequence等同于shell命令exit 1。参数由空格分隔,没有引用来改变分离过程。

  2. 您传递一系列参数:['exit 1'],其长度为1.这相当于shell命令"exit 1"。你的第一个(也是唯一的)参数中有空格,类似于用引号括起来。

  3. 您可以验证,两个命令的退出代码是不同的,因此您的Python脚本输出是不同的。