web-dev-qa-db-fra.com

Passer un tuple comme argument de ligne de commande

Mon exigence est de passer un Tuple comme argument de ligne de commande comme

--data (1,2,3,4)

J'ai essayé d'utiliser le module argparse, mais si je passe comme ça, il reçoit comme chaîne '(1,2,3,4)'. J'ai essayé en donnant type=Tuple Pour argparse.add_argument, Mais cela ne sert à rien ici.

Dois-je ajouter une nouvelle classe de type et la transmettre à l'argument type de add_argument?

Mise à jour

J'ai essayé le ast.literal_eval Sur la base des réponses. Merci pour ça. Mais cela donne des espaces dans le résultat comme indiqué ci-dessous.

(1,2,3,4)
<type 'str'>
(1, 2, 3, 4)
<type 'Tuple'>
16
user1423015

Définissez nargs de l'argument data sur nargs="+" (signifiant un ou plusieurs) et saisissez int, vous pouvez ensuite définir les arguments comme ceci sur la ligne de commande:

--data 1 2 3 4

args.data sera désormais une liste de [1, 2, 3, 4].

Si vous devez avoir un tuple, vous pouvez faire:

my_Tuple = Tuple(args.data)

Mettre tous ensemble:

parser = argparse.ArgumentParser()
parser.add_argument('--data', nargs='+', type=int)
args = parser.parse_args()
my_Tuple = Tuple(args.data)
17