sys.Argv i Python

sys.Argv i Python
SYS -modulen består av funksjoner og variabler som samhandler sterkt med tolken. SYS-modulen kommer forhåndsbelastet i Python og krever ingen installasjon. Blant de mange funksjonene og variablene er SYS.argv (). Sys.argv () brukes til å samle kommandolinjebrukerinngang. I denne opplæringen skal vi lære om SYS.argv (), og dens vanlige bruksområder.

sys.Argv

I hovedsak Sys.Argv () er en liste over alle kommandolinjeinngangene. Når skriptet blir utført, kan du mate brukerinngangen på forskjellige måter, og en slik måte er via kommandolinjen. La oss i dette første tilfellet anta at vi har et enkelt manus som heter Main.py.

trykk (“Hello World”)

Når vi utfører skriptet, vil vi legge til noen få kommandolinjeargumenter i tillegg til skriptnavnet. Hvis vi skulle utføre skriptet, ville vi få følgende:

$ Python3 Main.py hva har du opp til?
Hei Verden

Du merker her at kommandolinjens argumenter ikke forstyrret selve skriptet.

Så nå, la oss endre skriptet litt. Så antar at vi nå har et manus som heter Main.PY med følgende innhold:

Importer Sys
Trykk (Sys.argv)

Hvis vi skulle utføre skriptet, ville vi få følgende:

$ Python3 Main.py
['hoved.py ']

Som du kan se, får vi en liste med ett element i den fordi vi bare leverte den med ett element, skriptnavnet. Anta nå at vi gir det en litt annen kommandolinjeinngangsargumenter.

Importer Sys
Trykk (Sys.argv)

Hvis vi skulle utføre skriptet, ville vi få følgende:

$ Python3 Main.py hei verden
['hoved.Py, "Hallo," World ']

Det som skjer er at det henter alt vi ga via kommandolinjen eller alle kommandolinjeargumentene levert av brukeren. I mitt tilfelle la jeg til 'Hello World' etter navnet på manuset, og som sådan hentet det det til listen.

sys.Argv [0]

Sys.ARGV [0] er det første argumentet på listen. I alle tilfeller er det første argumentet alltid navnet på skriptet.

Importer Sys
name_of_script = sys.Argv [0]
print (name_of_script)

Når vi utfører skriptet, skriver vi inn følgende:

$ Python3 Main.py
hoved-.py

sys.argv [n]

Alternativt kan det være lurt å hente et spesifikt kommandolinjeargument. For eksempel kan det være lurt å hente brukerens innspill via kommandolinjeargumenter når du skriver et Python -program. I dette scenariet henter vi de tre første kommandolinjens argumenter.

Importer Sys
navn1 = sys.Argv [1]
name2 = sys.Argv [2]
name3 = sys.Argv [3]
print ("hallo", name1, ',', name2, 'og', name3)

Når vi utfører skriptet, skriver vi for eksempel følgende:

$ Python3 Main.Py Trevor Travis Tim
Hei Trevor, Travis og Tim

Her, Sys.ARGV [1] er det andre kommandolinjeargumentet, mens Sys.ARGV [2] er det tredje kommandolinjeargumentet, og SYS.ARGV [3] er det fjerde kommandolinjeargumentet. Dette er slik at selv om indeksen begynner på 0, og sys.argv [0] er navnet på skriptet.

Så hva om brukeren var forventet å legge inn n antall innganger og vi ikke visste hvor mange innganger det var? Anta at følgende skript ble skrevet:

Importer Sys
liste = sys.Argv [1:]
for verdi i listen:
trykk (verdi)

Når vi utfører skriptet, skriver vi for eksempel følgende:

$ Python3 Main.py hei Trevor Travis og Tim
Hallo
Trevor
Travis
og
Tim

Her, Sys.argv [1:] betyr at alle verdier fra sys.ARGV [1] brukes til slutten av listen. I dette tilfellet kan vi legge til så mange kommandolinjeargumenter som vi vil.

Strenger

Vær oppmerksom på at alle verdier fanget av variabel sys.ARGV er strenger. Så antar at vi ønsket å legge til tre tall som brukerinngangene.

Importer Sys
num1 = sys.Argv [1]
num2 = sys.Argv [2]
num3 = sys.Argv [3]
liste = [num1, num2, num3]
Totalt = sum (liste)
Print (Totalt)

Hvis vi skulle utføre skriptet, ville vi få følgende:

$ python3 main2.PY 3 4 5
Typeerror: ikke støttet operandtype (er) for +: 'int' og 'str'

Det vi får er en typeerror. Dette er fordi alle verdiene oppnådd fra listen er "streng" -verdier mens vi krever heltallverdier for å legge til. For å rette opp dette, må vi konvertere strengene til heltall:

Importer Sys
num1 = int (sys.Argv [1])
num2 = int (sys.Argv [2])
num3 = int (sys.Argv [3])
liste = [num1, num2, num3]
Totalt = sum (liste)
Print (Totalt)

Hvis vi skulle utføre skriptet, ville vi få følgende:

$ python3 main2.PY 3 4 5
12

Vi la til INT (SYS.Arg [n]) sørget for at vi konverterte strengen til et heltall.

Sys.ARGV -feil

En av de vanligste feilene som kastes (når vi ikke bruker SYS.Argv [1:] men spesifiser heller den første verdien ved hjelp av SYS.Argv [n]) er den til en indekserror (listeindeks utenfor rekkevidde). Hva denne feilen betyr er at kommandolinjeargumentene ikke ble spesifisert, og for å avverge denne feilen, må vi ta noen få forsiktighetsstrinn:

Importer Sys
Hvis Len (SYS.argv) 4:
skriv ut ("Vennligst skriv inn tre navn")
Hvis Len (SYS.arv) == 4:
navn1 = sys.Argv [1]
name2 = sys.Argv [2]
AME3 = SYS.Argv [3]
Print ("Hello", Name1)
Print ("Hello", Name2)
Print ("Hello", Name3)

Når vi utfører skriptet, skriver vi for eksempel følgende:

$ Python3 Main.Py Travis Trevor Tim
Hei Travis
Hei Trevor
Hei Tim

For å avverge feilen, må vi justere lengden på kommandolinjens argumenter. I forrige eksempel har vi tre navn og et skriptnavn, noe som betyr at det er totalt 4 verdier. Dermed sier vi at hvis lengden er større enn 4 eller mindre enn 4, kan du be brukeren legge inn tre navn; ellers, skriv ut de tre navnene.

SYS -modulen er veldig viktig, da den tillater interaksjon med Python -tolken. Spesielt den variable SYS.ARGV er en liste som inneholder alle brukernes innlatende kommandolinjeargumenter. Sys.Argv [0] definerer navnet på skriptet i alle tilfeller. Selv om Sys.ARGV () brukes veldig ofte til å samle kommandolinjeargumenter, en annen enda bedre måte å samle kommandolinjeargumenter på er ved å bruke argparse. Men det er en historie for en annen dag!