Использование "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 2

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