使用argparse传递输出线数

时间:2019-01-01 22:46:07

标签: python argparse

我正在编写一个输出列表的程序。假设此列表可以包含数百个项目。我想使用argparse传递一个选项,以显示输出中显示了多少个项目,默认为15行。如何获得在函数中作为变量传递的选项?

def get_args(argv = None):
    parser = argparse.ArgumentParser()
    parser.add_argument(
    # ...omitted code for other options
    parser.add_argument(
        '-n',
        '--noutput',
        default = 15,
        type = int,
        help = 'Number of lines in output'
    )
    return parser.parse_args(argv)


def scramble_words():
"""
Shuffle words in new_list
Print reordered words by newline
"""
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

2 个答案:

答案 0 :(得分:2)

另一种选择是使用Click包来创建命令行选项。我个人觉得它更直观。

import click

@click.command()
@click.option('-n', '--noutput')
def driver(noutput):
    print(noutput)

def scramble_words(noutput):
    """
    Shuffle words in new_list
    Print reordered words by newline
    """
    new_list=['a', 'b', 'c', 'd', 'e']
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

if __name__ == "__main__":
    driver()

如果您要坚持使用argparse,可以通过以下方法将参数传递给函数。我对您可能如何使用代码进行了一些假设。

import sys
import argparse
import random

def get_args(argv = None):
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-n',
        '--noutput',
        default = 15,
        type = int,
        help = 'Number of lines in output'
    )

    return parser.parse_args()

def scramble_words(noutput):
    """
    Shuffle words in new_list
    Print reordered words by newline
    """
    new_list=['a', 'b', 'c', 'd', 'e']
    random.shuffle(new_list)
    print( )
    print("\n\n".join(new_list[:--noutput]))

if __name__ == "__main__":

    args = get_args(sys.argv)
    scramble_words(args.noutput)

答案 1 :(得分:1)

您没有显示如何调用这两个函数,而是类似

def scramble_words(lst, n=15):
    """
    Shuffle words in lst
    Print n reordered words by newline
    """
    random.shuffle(lst)
    print()
    print("\n\n".join(lst[:n]))

# ...
args = get_args()
scramble_words(new_list, args.noutput)

更好的设计是让呼叫者进行打印,并且可能只在单词之间打印一条换行符。