Чи має Python аргумент argc?


79

Я написав ту саму програму (відкритий текстовий файл та вміст відображення) на мовах 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*)

Можливий дублікат python та sys.argv
jww

З точки зору об'єктної орієнтації я можу зрозуміти, чому argc слід поєднувати з argv. Якби це були два об'єкти, вони могли б мутувати взаємозалежно один від одного. Це має сенс для argc бути атрибутом argv (а не sys), я просто не впевнений, що len - це ім'я атрибута defacto, яке я б використовував. argv .__ len__ є критичним з механічних причин, і оскільки він там не має сенсу давати йому іншу назву. Я б, мабуть, віддав перевагу дескриптору проксі-сервера sys, як sys.argc = property(lambda self: len(self.argv)).__get__(sys, sys.__class__)би
ThorSummoner

Відповіді:


123

У python список знає свою довжину, тому ви можете просто зробити, len(sys.argv)щоб отримати кількість елементів у argv.


імпортувати sys # підрахувати аргументи аргументи = len (sys.argv) - 1 друк ("скрипт викликається з аргументами% i"% (аргументи))
Тео

17

Я часто використовую швидкий-брудний трюк, щоб прочитати фіксовану кількість аргументів із командного рядка:

[filename] = sys.argv[1:]

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

Це присвоїть один аргумент filenameі викличе виняток, якщо аргументу не буде точно.



0

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.


Мені подобається "краще просити прощення, ніж дозвіл" для більшості випадків на Python. У випадку з аргументами командного рядка, можливо кращим досвідом роботи користувача було б показати аргументи командного рядка, необхідні для сценарію Python, якщо присутня неправильна кількість аргументів.
DoomGoober

@DoomGoober "надане ім'я файлу" - це аргумент, який він очікує.
Cees Timmerman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.