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*)
Dan1676
quelle
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.

sepp2k
quelle
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.

Marcelo Cantos
quelle
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.

Cees Timmerman
quelle
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