Python 传递包含空格的输入字符串并用于 smbus
Python pass input string which has spaces and use for smbus
我的 ic2 代码是。
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)
它工作正常。
我测试了这段代码。
import argparse
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
print 'Params=', var1, var2, var3
由
python test.py 0x20 0x14 0x01
Params= 0x20 0x14 0x01
但是当我尝试编码时。
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 行,位于
bus.write_byte_data(var1, var2, var3)
类型错误:需要一个整数
我该如何解决?
你的参数值看起来像 HEX。您是通过批处理还是 bash 调用它? Python可以自动区分十六进制和十进制,batch/bash不能。
在这种情况下,尽管您将 HEX 提交给 sys.argv[x]
,但 bash/batch 认为它是一个字符串并将该字符串提交给 python。因此,您需要明确地convert to HEX int。
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
注意:如果您想要一个非十六进制整数('normal' 整数),您可以使用基数 0
而不是 16
(see here) 进行转换.
我的 ic2 代码是。
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)
它工作正常。
我测试了这段代码。
import argparse
import sys
var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]
print 'Params=', var1, var2, var3
由
python test.py 0x20 0x14 0x01
Params= 0x20 0x14 0x01
但是当我尝试编码时。
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 行,位于
bus.write_byte_data(var1, var2, var3)
类型错误:需要一个整数
我该如何解决?
你的参数值看起来像 HEX。您是通过批处理还是 bash 调用它? Python可以自动区分十六进制和十进制,batch/bash不能。
在这种情况下,尽管您将 HEX 提交给 sys.argv[x]
,但 bash/batch 认为它是一个字符串并将该字符串提交给 python。因此,您需要明确地convert to HEX int。
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
注意:如果您想要一个非十六进制整数('normal' 整数),您可以使用基数 0
而不是 16
(see here) 进行转换.