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)”