Вы можете передать кортежи как строки и преобразовать их в фактические кортежи, используя ast.literal_eval()
:
from sys import argv
from ast import literal_eval
for x in argv[1:]:
tup = literal_eval(x)
print(tup, type(tup))
Что можно назвать так:
$ python ./pyProg.py "(1, 2)"
(1, 2) <class 'tuple'>
Ошибки обработки:
Если переданная строка не является допустимым выражением, могут быть вызваны как SyntaxError , так и ValueError . Поэтому, вероятно, безопасно обернуть вышеупомянутое в try/except
:
from sys import argv
from ast import literal_eval
for x in argv[1:]:
try:
tup = literal_eval(x)
print(tup, type(tup))
except (SyntaxError, ValueError):
print("%s -> Invalid tuple format given" % x)
Что можно увидеть здесь:
$ python ./pyProg.py "(1, 2"
(1, 2 -> Invalid tuple format given
$ python ./pyProg.py "(1, 2) (1, 2)"
(1, 2) (1, 2) -> Invalid tuple format given