Есть ли у Python аргумент argc? - PullRequest
67 голосов
/ 20 ноября 2011

Я написал ту же программу (открыть текстовый файл и показать содержимое) на C и C ++. Сейчас я делаю то же самое в Python (на машине с Linux).

В программах на C я использовал код:

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

Вопрос: Что используется в Python для проверки количества аргументов

#!/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()

Токовый выход:

./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*)

Ответы [ 4 ]

108 голосов
/ 20 ноября 2011

В Python список знает свою длину, поэтому вы можете просто сделать len(sys.argv), чтобы получить количество элементов в argv.

16 голосов
/ 20 ноября 2011

Я часто использую хитрый прием, чтобы прочитать фиксированное количество аргументов из командной строки:

[filename] = sys.argv[1:]

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

Это назначит один аргумент filename и вызовет исключение, еслиточно не один аргумент.

8 голосов
/ 20 ноября 2011

Вам лучше смотреть на argparse для разбора аргументов.

http://docs.python.org/dev/library/argparse.html

Просто облегчает, не нужно делать тяжелую работу самостоятельно.

0 голосов
/ 20 ноября 2011

dir(sys) говорит нет. len(sys.argv) работает, но в Python лучше попросить прощения, чем разрешения, поэтому

#!/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()

отлично работает и короче.

Если вы все равно собираетесь выйти, лучше бы:

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

Я использую print(), поэтому он работает в 2.7, а также в Python 3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...