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
( см. здесь).