使用'argparse'而不是sys.argv

时间:2012-09-07 01:34:25

标签: python argparse argv

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

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

目前,我的sys.argv是:

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

我的argparse打印出Namespace,如下所示:

arg = parser.parse_args()
print arg

如何使用它来打开文件?我想使用argparse,因为参数的错误handlign更容易。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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可以访问