Python pass input string which has spaces and use for smbus
我的IC2代码是。
1 2 3 4 5 6 7 8 9 10 11 12 | import argparse import smbus import time bus = smbus.SMBus(1) bus.write_byte_data(0x20, 0x00, 0x00) bus.write_byte_data(0x20, 0x01, 0x00) bus.write_byte_data(0x20, 0x14, 0x01) time.sleep(0.5) bus.write_byte_data(0x20, 0x12, 0x00) time.sleep(0.5) |
它很好用。
我测试了这个代码。
1 2 3 4 5 6 | import argparse import sys var1 = sys.argv[1] var2 = sys.argv[2] var3 = sys.argv[3] print 'Params=', var1, var2, var3 |
通过
1 2 | python test.py 0x20 0x14 0x01 Params= 0x20 0x14 0x01 |
但当我尝试编码的时候。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import argparse import sys import smbus import time var1 = sys.argv[1] var2 = sys.argv[2] var3 = sys.argv[3] bus = smbus.SMBus(1) bus.write_byte_data(0x20, 0x00, 0x00) bus.write_byte_data(0x20, 0x01, 0x00) bus.write_byte_data(var1, var2, var3) time.sleep(0.5) bus.write_byte_data(0x20, 0x12, 0x00) time.sleep(0.5) |
python test.py 0x20 0x14 0x01
回溯(最近一次呼叫的最后一次):文件"test.py",第16行,in总线.写入字节数据(var1,var2,var3)类型错误:需要整数
我怎么修?
您的参数值看起来像十六进制。你是通过批处理还是bash来调用这个?python可以自动区分十六进制和十进制,batch/bash不能。
在这种情况下,尽管您将hex提交给
1 2 3 | var1 = int(sys.argv[1], 16) # The '16' defines the base here var2 = int(sys.argv[2], 16) # Base '16' converts HEX string to HEX int var3 = int(sys.argv[3], 16) # You must set base to '16' here |
注意:如果您想要一个非十六进制整数("普通"整数),您可以使用基本的