python subprocess.call不在if语句中执行

时间:2013-04-16 12:54:53

标签: python shell subprocess execute

我有这个块:

if data[0] == OUTPUT:
    pin,val = ord(data[0]),ord(data[1])
    if (pin == 1): #Turn Master Bedroom Light on
        process = subprocess.call(cmd1, stdout=subprocess.PIPE)
        print process
    elif (pin == 2): #Turn Master Bedroom Light off
        process = subprocess.call(cmd2, stdout=subprocess.PIPE)
        print process
    elif (pin == 3 or pin == 4): #Toggle garage door
        process = subprocess.call(cmd3, stdout=subprocess.PIPE)
        print process
    else:
        print "Invalid Pin"

其中cmd1,cmd2和cmd3是我正在尝试执行的shell脚本文件,OUTPUT是一个等于1的预定义常量。我知道该块实际执行但它与subprocess.call语句挂起。

当我跑步时:

subprocess.call(cmd1, stdout=subprocess.PIPE)

本身在python解释器中,它工作得很好,但在我的if-elif块中它会挂起。知道为什么吗?我完全感到困惑......我现在忽略了val的价值,直到我能让它发挥作用。

提前致谢!我对python很新,所以请温柔:)

2 个答案:

答案 0 :(得分:1)

documentation for subprocess.call

  

不要将stdout = PIPE或stderr = PIPE与此功能一起使用。作为管道   在当前进程中没有被读取,子进程可能会阻塞   如果它为管道生成足够的输出以填充OS管道缓冲区。

答案 1 :(得分:-1)

  

OUTPUT是一个等于1的预定义常量

如果data[0] == 1,您的ord()来电将失败。你没有提到这一点,所以没有任何相似之处。

如果我假设data可能是字符串或bytes()或unicode事件而data[0] == '\x01',则有两种可能的情况:

OUTPUT确实是== 1,然后data[0] == OUTPUT的测试失败,为'\x01' != 1,并且会跳过整个内容。这是最可能的情况。

OUTPUT == '\x01',然后执行整个内容并执行您的第一个if块,但是您告诉我们这不会发生。

SSCCE会有所帮助。