如何使用argparse轻松存储文件和文件夹位置,然后使用这些值

时间:2015-07-11 09:13:51

标签: python arguments argparse

我有Python模块/脚本(取决于您阅读的内容)我想打开一个文件并将内容解压缩到一个目录,例如,使用file=sys.argv[1]folder=sys.argv[2]可以正常工作但是我' d喜欢使用argparse以方便最终用户使用。

if len(sys.argv) < 2:
    print "Usage: '%s -h'" % sys.argv[0]
    sys.exit(0)

def untar():
    #Both these values to come from argparse
    tarloc = tfile
    dest = folder

    #tarloc = sys.argv[1]
    #dest = sys.argv[2]
    filecount = 0
    tar = tarfile.open(tarloc)
    ....etc

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Module to untar TAR files')
    parser.add_argument('-f', "--file", help='File to open', action="store_true", dest="tfile")
    parser.add_argument('-d', "--dest", help='Destination to extract to', action="store_true", dest="folder")
    args = parser.parse_args()
    print args

有人可以帮我展示你如何获得argparse存储args以及你如何使用它们。

还应该argparse高于或低于if __name__ ==部分吗?

1 个答案:

答案 0 :(得分:3)

您的文件和目标参数都是必需的;如果用户没有指定它们,那么你的脚本将无所事事。

所以不要在这里使用---选项,你想要位置参数:

parser = argparse.ArgumentParser(description='Module to untar TAR files')
parser.add_argument('file', help='File to open')
parser.add_argument('folder', help='Destination to extract to')
args = parser.parse_args()

请注意,我删除了action个参数; store_true用于布尔标志选项;例如如果用户在命令行上指定了标志,则会打开某些内容,不会生成任何参数。

接下来,将这些filefolder值传递给您的函数:

def untar(tarloc, folder):
    filecount = 0
    tar = tarfile.open(tarloc)
    # ....etc

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Module to untar TAR files')
    parser.add_argument('file', help='File to open')
    parser.add_argument('folder', help='Destination to extract to')
    args = parser.parse_args()
    untar(args.file, args.folder)

您可能需要关注Python文档中包含的argparse tutorial以获取更多详细信息。