2

我的脚本当前用于sys.argv检查提供给程序的输入文件。

我正在尝试使用argparse它,但我似乎无法让它工作。我能够设置它并添加一个参数,但是当我解析一个参数并打印该解析后的参数时,我得到了一个命名空间。我怎样才能得到一个字符串?基本上,我想将参数作为一个字符串,并打开一个具有该名称的文件。

目前,我sys.argv的是:

filename = sys.argv[1]
f = open(filename, 'r')

我的argparse打印Namespace如下:

arg = parser.parse_args()
print arg

如何使用它打开文件?我想使用argparse,因为参数的错误处理要容易得多。

4

2 回答 2

4

认为使用该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
于 2012-09-07T01:54:43.750 回答
2

打印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

于 2012-09-07T01:37:38.537 回答