没有传递参数时如何打印用法说明?

时间:2019-04-02 06:45:54

标签: python argparse

我要传递一个称为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
$

3 个答案:

答案 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,
)