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

How do I easily store a file and folder location with argparse and then use those values

我有 Python module/script(取决于您阅读的内容)我想打开一个文件并将内容提取到一个目录中,使用 file=sys.argv[1] 和 [= 可以正常工作12=] 例如,但我想使用 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__ == 部分之上还是之下?

你的文件和目标参数都是强制性的;如果用户没有指定它们,您的脚本将无事可做。

所以不要在这里使用 --- 选项,您需要 positional arguments:

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 了解更多详细信息。