Hat Python ein Argc-Argument?


78

Ich habe das gleiche Programm (offene Textdatei und Inhalt anzeigen) in C und C ++ geschrieben. Jetzt mache ich dasselbe in Python (auf einem Linux-Rechner).

In den C-Programmen habe ich den Code verwendet:

if (argc != 2) {
    /* exit program */
}

Frage: Was wird in Python verwendet, um die Anzahl der Argumente zu überprüfen

#!/usr/bin/python
import sys
try:
    in_file = open(sys.argv[1], "r")
except:
    sys.exit("ERROR. Did you make a mistake in the spelling")
text = in_file.read()
print text
in_file.close()

Aktueller Output:

./python names.txt = Displays text file (correct)
./python nam = error message: stated from the sys.ext line (correct)
./python = error message: stated from the sys.ext line (wrong: want it to be a
separate error message stating *no file name input*)

Mögliches Duplikat von Python und sys.argv
jww

Aus Sicht der Objektorientierung kann ich verstehen, warum argc an argv gekoppelt werden sollte. Wenn dies zwei Objekte wären, könnten sie voneinander abhängig mutiert werden. Es ist sinnvoll, dass argc ein Attribut von argv (und nicht von sys) ist. Ich bin mir nur nicht sicher, ob len der defacto-Attributname ist, den ich verwenden würde. argv .__ len__ ist aus mechanischen Gründen kritisch, und da es dort ist, macht es nicht viel Sinn, ihm einen anderen Namen zu geben. Ich würde wahrscheinlich ein sys begünstigt haben Proxy - Beschreiber wie sys.argc = property(lambda self: len(self.argv)).__get__(sys, sys.__class__)wenn
ThorSummoner

Antworten:


123

In Python kennt eine Liste ihre Länge, sodass Sie nur len(sys.argv)die Anzahl der Elemente ermitteln können argv.


import sys # count die Argumente Argumente = len (sys.argv) - 1 print ("das Skript wird mit% i Argumenten aufgerufen"% (Argumente))
Teo

17

Ich verwende oft einen Quick-n-Dirty-Trick, um eine feste Anzahl von Argumenten aus der Befehlszeile zu lesen:

[filename] = sys.argv[1:]

in_file = open(filename)   # Don't need the "r"

Dadurch wird das eine Argument zugewiesen filenameund eine Ausnahme ausgelöst, wenn nicht genau ein Argument vorhanden ist.



0

dir(sys)sagt nein len(sys.argv)funktioniert, aber in Python ist es besser, um Vergebung zu bitten als um Erlaubnis

#!/usr/bin/python
import sys
try:
    in_file = open(sys.argv[1], "r")
except:
    sys.exit("ERROR. Can't read supplied filename.")
text = in_file.read()
print(text)
in_file.close()

funktioniert gut und ist kürzer.

Wenn Sie trotzdem beenden, ist dies besser:

#!/usr/bin/python
import sys
text = open(sys.argv[1], "r").read()
print(text)

Ich benutze, print()damit es sowohl in 2.7 als auch in Python 3 funktioniert.


Ich mag es in den meisten Fällen in Python, "lieber um Vergebung als um Erlaubnis zu bitten". Im Fall von Befehlszeilenargumenten besteht eine wohl bessere Benutzererfahrung darin, die Befehlszeilenargumente anzuzeigen, die für das Python-Skript erforderlich sind, wenn die falsche Anzahl von Argumenten vorhanden ist.
DoomGoober

@DoomGoober "angegebener Dateiname" ist das erwartete Argument.
Cees Timmerman
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.