Использование "argparse" в отличие от sys.аргв
Мой скрипт в настоящее время использует sys.argv
для проверки наличия входного файла, предоставленного программе.
Я пытаюсь использовать argparse
вместо этого, но я не могу заставить его работать. Я смог настроить его и добавить аргумент, но когда я анализирую аргумент и печатаю этот анализируемый аргумент, я получаю пространство имен. Как я могу получить строку? В принципе, я хочу взять аргумент в виде строки и открыть файл с этим именем.
В настоящее время мой sys.argv
является:
filename = sys.argv[1]
f = open(filename, 'r')
Мой argparse
выводит a Namespace
как образом:
arg = parser.parse_args()
print arg
Как я могу использовать это, чтобы открыть файл? Я хочу использовать argparse
, так как ошибка handlign для Аргументов там намного проще.
2 ответа:
Думаю, что его предпочтительнее (или что-то!) использовать оператор
with
для открытия файла следующим образом:# printfile.py import argparse parser = argparse.ArgumentParser(description="Opens a file and does cool stuff ^^") parser.add_argument('filename', type=str, help="Path to file to open") args = parser.parse_args() with open(args.filename) as f: print ' my uber cool file:' print f.readlines()
Указание этих ключевых слов args также помогает сделать довольно-h вариант текста справки (который является аккуратным аккуратным)
[dlam@dlam-63221:~] $ python printfile.py -h usage: printfile.py [-h] filename Opens a file and does cool stuff ^^ positional arguments: filename Path to file to open
Выведите
arg
с точкой, за которой следует любое имя, присвоенное аргументу в настройкеargparse
.Пример:
parser = argparse.ArgumentParser(description = 'Title you want') parser.add_argument('-f', action = "store", dest = "fflag", type = str, help = "Filename to be used, stdin is default")
В этом случае имя файла будет предшествовать
-f
в командной строке и будет доступно поparser.fflag
типаstr