Python pass входная строка, которая имеет пробелы и используется для 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

Traceback (последний вызов был последним): файл "test.py", строка 16, в bus.write_byte_data(var1, var2, var3)
Ошибка типа: требуется целое число

Как я могу это исправить?

1 ответ

Решение

Ваши значения аргумента выглядят как HEX. Вы называете это через пакет или bash? Python может различать HEX и десятичное автоматически, batch/bash не может.

В этом случае, хотя вы предоставляете HEX sys.argv[x]bash/batch считает, что это строка, и отправляет строку в python. Поэтому вам нужно явно преобразовать в 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

NB. Если вы хотите использовать не-HEX int число ("обычное" целое число), вы можете конвертировать его с помощью base 0 скорее, чем 16 ( см. здесь).

Другие вопросы по тегам