Eseguire argomenti della riga di comando nello script python

Ho un programma che viene eseguito dalla riga di comando simile a questo

python program.py 100 rfile

Come posso scrivere una nuovo script in modo che invece di correre con ‘100’ argomento, posso eseguire consecutivamente con un elenco di argomenti come [50, 100, 150, 200]?

Edit: Il motivo che mi chiedo è questo che voglio registrare come ‘program.py’ esegue con argomentazioni diverse.

Vuoi più argomenti o di un singolo argomento è una lista python?
Aggiunto il [shell] e [shell-scripting] tags; non sono sicuro se questo è ciò che l’OP ha in mente, ma mi sembra l’approccio più ovvia per almeno un paio di persone.

OriginaleL’autore Chris | 2010-10-15

4 Replies
  1. 8

    Se si crea un file bash come questo

    #!/bin/bash
    for i in 1 2 3 4 5
    do
      python program.py $i rfile
    done

    quindi fare chmod +x su quel file, quando si esegue, si occuperà di eseguire questi consecutivamente:

    python program.py 1 rfile
    python program.py 2 rfile
    python program.py 3 rfile
    python program.py 4 rfile
    python program.py 5 rfile
    Se si modifica 1 2 3 4 5 per [email protected], è possibile passare l’elenco dei numeri quando si esegue lo script, ad esempio the_new_bash_script 1 2 3 4 5.
    in realtà, cambiare "[email protected]" così si può fare the_new_script 1 2 "3 4" 5

    OriginaleL’autore Devrim

  2. 6

    È possibile utilizzare Devrim shell approccio o è possibile modificare il tuo script:

    Se il tuo script originale lavorato come questo:

    import sys
    do_something(sys.argv[1], sys.argv[2])

    Si potrebbe realizzare ciò che si desidera in questo modo:

    def main(args):
        for arg in args[:-1]:
            do_something(arg, args[-1])
    
    if __name__ == '__main__':
        import sys
        main(sys.argv[1:])

    Si sarebbe invocare piace così:

    python program.py 50 100 150 200 rfile

    Sto cercando di indovinare ciò che si desidera. Si prega di chiarire se questo non è giusto.

    Ho spiegato cosa volevo fare molto bene. Non ho voglia di modificare il program.py’ file originale ho menzionato. Voglio creare un nuovo script che esegue l’ ‘program.py’ script più volte in un elenco di argomenti, utilizzando un argomento ogni volta.
    potrebbe essere più facile da usare, Devrim guscio di approccio. È facile funzioni di chiamata in altri file python, ma non è così facile se program.py non ha qualcosa di simile a una “funzione principale”. Sai cosa voglio dire? (Hai familiarità con Python?)

    OriginaleL’autore Jon-Eric

  3. 4

    È possibile utilizzare Optparse

    Ti consente di utilizzare il programma come : python yourcode.py --input input.txt --output output.txt

    Questo è grande quando si dispone di un numero di console argomenti.

    Quindi nel tuo caso si potrebbe fare qualcosa di simile:

    parser.add_option("-i","--input", action="store", type="int", nargs=4, dest="mylist")

    Ora nella console, è possibile digitare python program.py -i 50 100 150 200

    Per l’accesso all’input, è possibile utilizzare mylist come un elenco.

    Nota: Come di Python 2.7 Optparse è stata eliminata e sostituita da un quasi identico argparse.

    OriginaleL’autore Nandit Tiku

  4. 2

    Se si vuole fare questo nel tuo script in python, è possibile organizzare per prendere un elenco di numeri interi utilizzando il argparse modulo (codice non testato):

    import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('rfile', type=argparse.FileType('r'))
    parser.add_argument('numbers', nargs='+', type=int)
    ns = parser.parse_args()

    Tali attività vengono svolte sotto l’egida di un main funzione spiegato da Jon-Eric.

    Se chiami il conseguente script da shell con

    python the_script.py filename 1 2 3 4 5 6

    si finirà con ns.file essere uguale al file filename, aperto per l’accesso in lettura, e ns.numbers essere uguale all’elenco [1, 2, 3, 4, 5, 6].

    argparse è assolutamente impressionante e anche la stampa delle informazioni di utilizzo di script e le sue opzioni se si chiama con --help. Si può personalizzare in troppi modi per spiegare qui, basta leggere il docs.

    argparse è nella libreria standard di Python 2.7; per la prima pitoni può essere installato come modulo in modo normale, ad esempio, via easy_install argparse, o in virtù di una dipendenza del pacchetto che il tuo script è parte di.

    OriginaleL’autore intuited

Lascia un commento