Come posso accedere agli argomenti della riga di comando in Python?


362

Uso Python per creare le impostazioni del mio progetto, ma ho bisogno di aiuto per ottenere gli argomenti della riga di comando.

Ho provato questo sul terminale:

$python myfile.py var1 var2 var3

Nel mio file Python, voglio usare tutte le variabili che vengono inserite.


1
Il modulo baker è un ottimo strumento per scrivere app da riga di comando Python. pypi.python.org/pypi/Baker/1.02
Spike Gronim

Risposte:



116
import sys

sys.argv[1:]

ti darà un elenco di argomenti (escluso il nome del file python)


5
Cosa [1:]significa?
Kolob Canyon,

8
@KolobCanyon significa "prendere un elenco secondario a partire dall'indice 1 fino alla fine", ovvero saltare il primo elemento
Kamil Jarosz,

@KolobCanyon prende il secondo argomento [1:]verso l'alto perché il primo argomento di sys.argvè per impostazione predefinita il nome del file python che si sta eseguendo, ad esempio testrun.py.
Samuel Nde,

95

Consiglio vivamente argparseche viene fornito con Python 2.7 e versioni successive.

Il argparsemodulo riduce il codice della piastra della caldaia e rende il codice più robusto, poiché gestisce tutti i casi d'uso standard (compresi i sottocomandi), genera l'aiuto e l'utilizzo per te, controlla e igienizza l'input dell'utente - tutte le cose di cui devi preoccuparti quando stanno usando l' sys.argvapproccio. Ed è gratuito (integrato).

Ecco un piccolo esempio:

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

e l'uscita per python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

e per python prog.py 1come ti aspetteresti:

2

7
Risposta di qualità, non proprio sicura del perché qualcuno qui dovrebbe usare uno degli altri approcci qui indicati. Soprattutto perché è integrato! Non avete cose migliori da fare che analizzare?
Bassinator

Solo per menzionare come dovresti accedere all'argomento specifico nello spazio dei nomi args: args.counter
MikeL

1
@Bassinator Nei casi in cui non è necessario analizzare gli argomenti.
riduzione dell'attività

per utilizzare il valore predefinito, senza un valore specifico nella riga di comando, è possibile utilizzare qualcosa del tipo: parser.add_argument('var3', nargs='?', type=int, default=3)var3 è un parametro facoltativo, se non si specifica un valore nella riga di comando è possibile accedere a var3 nel codice, valore predefinito per var3 = 3
Albicocco,

56

Codice Python:

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

Invocazione:

$python myfile.py var1 var2 var3

Produzione:

Params= var1 var2 var3 

24

È possibile utilizzare sys.argvper ottenere gli argomenti come un elenco.

Se è necessario accedere a singoli elementi, è possibile utilizzare

sys.argv[i]  

dove iè index, 0ti darà il nome del file python in esecuzione. Qualsiasi indice successivo sono gli argomenti passati.


6

Se lo chiami così: $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

Simile alle matrici che hai anche sys.argv[0]che è sempre la directory di lavoro corrente.


6
sys.argv[0]non è la directory di lavoro corrente. È il nome del file in esecuzione.
guarda il

5

Alcune cose aggiuntive che mi vengono in mente.

Come ha detto @allsyed sys.argv fornisce un elenco di componenti (incluso il nome del programma), quindi se vuoi conoscere il numero di elementi passati attraverso la riga di comando puoi usare len () per determinarlo. Sulla base di ciò, è possibile progettare messaggi di eccezione / errore se l'utente non ha passato un numero specifico di parametri.

Inoltre, se stai cercando un modo migliore per gestire gli argomenti della riga di comando, ti suggerirei di consultare https://docs.python.org/2/howto/argparse.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.