2012-11-04 12 views
8

Buduję skrypt, który używa argumentów do konfiguracji zachowania i odczytuje niezdefiniowaną liczbę plików. Za pomocą poniższego kodu można przeczytać jeden pojedynczy plik. Czy istnieje sposób, aby to osiągnąć bez konieczności ustawiania kolejnego argumentu, informując, ile plików powinien odczytać skrypt?argparse: Uzyskaj niezdefiniowaną liczbę argumentów

parser = argparse.ArgumentParser() 
parser.add_argument("FILE", help="File to store as Gist") 
parser.add_argument("-p", "--private", action="store_true", help="Make Gist private") 

Odpowiedz

22

Tak, zmienić linię "FILE" do:

parser.add_argument("FILE", help="File to store as Gist", nargs="+") 

Pozwoli to zebrać wszystkie argumenty pozycyjne na liście zamiast. Spowoduje to również wygenerowanie błędu, jeśli nie ma co najmniej jednego, na którym można pracować.

Sprawdź nargs documentation

+0

To wszystko, dziękuję. Zastanawiam się, dlaczego nie jest to w tutorialu argparse. – braindump

+1

http://docs.python.org/2/library/argparse.html#nargs – user2753523

+0

To jest chwalebne – pele88

5
import argparse 

parser = argparse.ArgumentParser() 

parser.add_argument('-FILE', action='append', dest='collection', 
        default=[], 
        help='Add repeated values to a list', 
        ) 

Wykorzystanie:

python argparse_demo.py -FILE "file1.txt" -FILE "file2.txt" -FILE "file3.txt" 

I w kodzie Pythona, można uzyskać do nich dostęp w zmiennej collection, który będzie zasadniczo być lista, lista pusta przez domyślna; oraz listę zawierającą dowolną liczbę argumentów, które do niej podasz.

Powiązane problemy