python - Python3 registrerer ikke tuple

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har denne indgang:
python script.py --key '(' music ',' aaa ')' --date '(' 01/01/1990 ', 0,0)'


Og jeg gør:


constrain = literal\_eval(sys.argv[2])
print(type(constrain))
print(type(sys.argv[4]))


Og alle udgange er str, mens de skal være tuples. Indgangen kan ikke ændres!

Bedste reference


Din kommandolinje skal fungere perfekt fra MSYS eller Linux, men her kører du det fra Windows Shell.


Windows-shell behandler ikke enkle citater som syntatiske. De re-passeres bogstaveligt til din python-kode. Til toppen af ​​alt fjernes de dobbelte citater, som gør din anden arg '(music,aaa)' , når de sendes til python: ingen måde du kan literal\_eval det. Så din indtastningsstreng har til at blive ændret (eller dit operativsystem :))


Gør dette for at ringe til din kode:


python script.py --key "(""music"",""aaa"")" --date "(""01/01/1990"",0,0)"


Du skal citere argumenterne og fordoble citaterne i argumenterne. Og brug udelukkende dobbeltkurser.


EDIT: eller endnu bedre (ville arbejde på både Linux og Windows): Brug enkle citater inde i dine argumenter, dobbelt citater udenfor (literal\_eval er ikke json: det forstår både enkle og dobbelte citater!):


python script.py --key "('music','aaa')" --date "('01/01/1990',0,0)"


nu får jeg:


<type 'tuple'>
<type 'str'>


(du får str, fordi det fjerde argument altid er en streng, du har sandsynligvis glemt at literal\_eval det)


og print(constrain) giver:


('music', 'aaa')


(så det er ikke et python problem, snarere et CMD problem)