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) 进行转换.