我有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__ ==
部分吗?
答案 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
用于布尔标志选项;例如如果用户在命令行上指定了标志,则会打开某些内容,不会生成任何参数。
接下来,将这些file
和folder
值传递给您的函数:
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以获取更多详细信息。