2013-09-25 15 views
5

To jest mój skryptPython argumenty wiersza poleceń w głównym, należy pominąć nazwę skryptu

def main(argv): 
if len(sys.argv)>1: 
    for x in sys.argv: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

tak z linii poleceń piszę python myscript.py commandlineargument

chcę go pominąć myscript.py i po prostu uruchomić commandlineargument przez commandlineargument(n)

, więc rozumiem, że moja pętla for nie uwzględnia tego, ale jak mogę to zrobić?

+1

Jeśli funkcja 'main' przyjmuje parametr' argv', powinna prawdopodobnie _używać tego parametru, zamiast go ignorować i używać 'sys.argv' zamiast ... – abarnert

+0

Nie potrzebujesz też sprawdzenia' if' wszystko. Jeśli nie ma żadnych argumentów, pętla zostanie pomyślnie uruchomiona 0 razy, więc niech to zrobi. – abarnert

+0

@abarnert Mam jeszcze inny – CQM

Odpowiedz

14

Od sys.argv jest lista, można użyć krojenie sys.argv[1:]:

def main(argv): 
    for x in argv[1:]: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

Ale czy można mieć tylko jeden parametr skryptu, po prostu go index: sys.argv[1]. Ale należy sprawdzić, czy długość sys.argv jest więcej niż 1 i wygeneruje błąd, jeśli tak nie jest, na przykład:

def main(argv): 
    if len(argv) == 1: 
     print "Not enough arguments" 
     return 
    else: 
     build(argv[1]) 

if __name__ == "__main__": 
    main(sys.argv) 
2

Prawdziwą odpowiedzią jest, aby poznać i wykorzystać argparse, choć.

+0

użyłem tego wcześniej, jaka jest korzyść między nim a sys.argv lub przy użyciu optparse vs coś innego – CQM

+0

Jest to rzecz, której należy użyć do analizy arg (chyba że potrzebujesz 'cliff'). Ma świetne API. To nie jest przestarzałe jak "optparse". Standaryzuje wygląd i styl twojego skryptu. – jhermann

Powiązane problemy