在Raspberry Pi上,我进行了设置,以便它监视来自用户的ASCII串行输入,然后使用解析后的数据解析并填充矩阵。但是当我尝试对数据做些什么时:
for i in range(1,7):
if matrixA[i][1]>0:
print "sending DO_Fire (pin %d) HIGH for %dms, with a power level of %d"%(DO_Fire,int(matrixA[i][1]),int(matrixA[i][2]))
os.system("pigs m %d w wvclr wvag 16 0 %d 0 16 10000 wvcre")%(DO_Fire,int(matrixA[i][1]))
os.system("pigs m %d w wvag 0 16 %d 16 0 10000 wvcre wvtx 0")%(LED_Fire,int(matrixA[i][2]))
它打印消息就好了,但是命令行操作有问题,引用了以下错误:
TypeError: unsupported operand type(s) for %: 'int' and 'tuple'
首先,当我这样做时,我正在使用$s
,所以我认为我只需要将数据转换为int
,但这并没有任何区别。< / p>
我错过了什么?任何建议或有用的意见将不胜感激。
根据要求在下方进行完整追溯:
Traceback (most recent call last):
File "rs232.py", line 974, in <module>
line = readLine(ser)
File "rs232.py", line 131, in readLine
goA()
File "rs232.py", line 184, in goA
preheats() #detect all stored preheats and fire them
File "rs232.py", line 147, in preheats
os.system("pigs m %d w wvclr wvag 16 0 %d 0 16 10000 wvcre")%(DO_Fire,int(matrixA[i][1]))
TypeError: unsupported operand type(s) for %: 'int' and 'tuple'
答案 0 :(得分:3)
os.system()
调用返回一个整数(进程退出代码)。您希望将%
运算符应用于字符串参数,而不是函数的返回值。
你这样做:
os.system(string) % tuple
而不是
os.system(string % tuple)
移动这些括号:
os.system("pigs m %d w wvclr wvag 16 0 %d 0 16 10000 wvcre" % (DO_Fire, int(matrixA[i][1])))
os.system("pigs m %d w wvag 0 16 %d 16 0 10000 wvcre wvtx 0" % (LED_Fire, int(matrixA[i][2])))