我要传递一个称为FILE的位置参数字符串,但是当没有参数传递时,我希望它打印用法说明。
每次我在命令行中写“ ./files.py”时都没有后面的参数,我的代码什么也没做。我在做什么错了?
import argparse
import re
#--------------------------------------------------
def get_args():
"""get arguments"""
parser = argparse.ArgumentParser(
description='Create Python script',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('FILE', help='Pass a file', type=str)
return parser.parse_args()
#--------------------------------------------------
def main():
"""main"""
args = get_args()
FILE = args.FILE.IGNORECASE()
if len(args) != 1:
print("Usage: files.py {}".format(FILE))
sys.exit(1)
# --------------------------------------------------
if __name__ == '__main__':
main()
预期结果:
$ ./files.py
Usage: files.py FILE
我得到的是什么
$./files.py
$
答案 0 :(得分:0)
您从不运行main
...
import argparse
import re
#--------------------------------------------------
def get_args():
"""get arguments"""
parser = argparse.ArgumentParser(
description='Create Python script',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('FILE', help='Pass a file', type=str)
return parser.parse_args()
#--------------------------------------------------
def main():
"""main"""
args = get_args()
FILE = args.FILE.IGNORECASE()
if len(args) != 1:
print("Usage: files.py {}".format(FILE))
sys.exit(1)
main()
答案 1 :(得分:0)
您需要定义代码的入口点。如果要按照描述(./files.py
的方式调用它,则需要这样定义主入口点:
if __name__ == "__main__":
"""main"""
args = get_args()
FILE = args.FILE.IGNORECASE()
if len(args) != 1:
print("Usage: files.py {}".format(FILE))
sys.exit(1)
答案 2 :(得分:0)
您必须告诉操作系统该脚本必须由Python执行。将shebang添加为脚本的第一行:
#!/usr/bin/env python3
import argparse
...
否则,您必须使用Python显式执行脚本:
python3 ./files.py
您必须调用您的main
函数。一个好的地方是脚本的末尾,注意只能在执行时运行:
if __name__ == '__main__': # do not run on import
main()
这将提供所需的输出:
$ python3 so_script.py
usage: so_script.py [-h] FILE
so_script.py: error: the following arguments are required: FILE
请注意,argparse
已经为您创建了用法和帮助消息。无需自己创建它们。实际上,argparse
会在运行您自己的用法信息之前结束脚本。
如果不想使用-h
开关,请在创建参数解析器时传递add_help=False
。
parser = argparse.ArgumentParser(
description='Create Python script',
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
add_help=False,
)