python传递命令行参数with-in程序

时间:2017-11-03 19:32:39

标签: python python-2.7 argparse

我在python程序下面从命令行获取参数。

import argparse
import sys

choice=['orange','apple', 'grapes', 'banna']

def select():
    parser = argparse.ArgumentParser(prog='one', description='name test')
    parser.add_argument(
        'fname',
        action="store",
        type=str,
        choices=choice,
        help="furits name")

    args = parser.parse_args(sys.argv[1:2])

    print 'selected name {0}\n'.format(args.fname)

if __name__ == '__main__':
    select()

这是有效的

 python s.py apple
selected name apple

如何使用in-main函数进行内联参数。我尝试了这个,但它没有用。

改变主线。

if __name__ == '__main__':
    sys.argv[0]='apple'
    select()

低于错误。

usage: one [-h] {orange,apple,grapes,banna}
one: error: too few arguments

我怎样才能在论证中实现这一点?

感谢 -SR

1 个答案:

答案 0 :(得分:1)

您的索引错误sys.argv[0]将是python脚本的路径。你想要的是:

if __name__ == '__main__':
    if len(sys.argv) == 1:
        sys.argv.append("apple")
    select()

但是,这是一种奇怪的做事方式。经过一番思考后,我想到了这一点:

choice=['orange','apple', 'grapes', 'banna']

def select():
    parser = argparse.ArgumentParser(prog='one', description='name test')
    parser.add_argument(
        'fname',
        nargs='?',
        default='apple',
        action="store",
        type=str,
        choices=choice,
        help="furits name")

    args = parser.parse_args(sys.argv[1:2])

    print 'selected name {0}\n'.format(args.fname)

if __name__ == '__main__':
    select()

请注意对add_argument()调用的nargs='?'default='apple'添加内容。这些使参数可选,并将默认值设置为" apple"如果没有提供参数。