Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python subprocess.call不在if语句中执行_Python_Shell_Subprocess_Execute - Fatal编程技术网

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

python subprocess.call不在if语句中执行,python,shell,subprocess,execute,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 Lig

我有这个街区:

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脚本文件,输出是一个预定义的常量,等于1。我知道该块实际上是执行的,但它与subprocess.call语句挂起

当我跑步时:

subprocess.call(cmd1, stdout=subprocess.PIPE)
在python解释器中,它本身工作得很好,但在if-elif块中它挂起。知道为什么吗?我完全困惑。。。我现在忽略val的值,直到我可以让它工作

提前谢谢!我刚刚接触python,所以请温柔一点:)

输出是一个预定义的常数,等于1

如果
data[0]==1
,您的
ord()
调用将失败。你没提那件事,所以没有类似的事情发生

如我所想,如果
数据
可能是一个字符串或
字节()
或一个unicode对象,并且
数据[0]='\x01'
,则有两种可能的情况:

如果
输出
实际上是
==1
,则对
数据[0]==OUTPUT
的测试失败,因为
'\x01'!=1
,则跳过所有内容。这是最可能的情况

或者
OUTPUT=='\x01'
,然后执行全部内容,如果执行了第一个
块,则执行第一个
,但您告诉我们这不会发生

A会有帮助的。

各州

不要将stdout=PIPE或stderr=PIPE用于此函数。管道 如果当前进程中没有读取,则子进程可能会阻塞 如果它生成足够的输出到管道以填充OS管道缓冲区


如果
数据[0]
等于
1
ord(数据[0])
给出错误(
预期字符串长度为1,但找到int
)。但是,如果
data[0]
等于
“1”
ord(data[0])
等于
49
@ExP,这就是为什么我认为
data[0]=='\x01'
@glglglglglglgl我的错误是“OUTPUT=chr(1)”