python传递具有空格的输入字符串,用于smbus

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提交给sys.argv[x],但是bash/batch认为它是一个字符串,并将该字符串提交给python。因此,需要显式地转换为hex int。

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

注意:如果您想要一个非十六进制整数("普通"整数),您可以使用基本的0而不是16进行转换(请参见此处)。