带有argparse参数表单列表的Python命令行参数不起作用

时间:2013-12-02 11:03:31

标签: python list colors command-line-arguments args

您好,我刚刚开始学习python。我有一个问题,我想修改一个名为LineGenerator.py的程序来自Mag Pi问题7。 完整代码:

http://www.themagpi.com/issue/issue-7/

该程序介绍了命令行参数。

我正在尝试添加命令行参数来更改图形的颜色。

首先我定义了颜色: ...

WH = 255,255,255

RE = 255,0,0

依旧......

然后我定义了命令行参数: ...

parser.add_argument('-c', action='store', dest='colour', type=str, 
                    help='Choose Colour')

...

稍后在我的程序中我想画线 ...

pygame.draw.line(screen, args.colour,(nSX),(nSY),(nEX,nEY),1)

...

当我用

启动脚本时
python LineGenerator.py -c WH

我收到此错误消息:

TypeError: invalid color argument

当我用“WH”直接在代码中更改“args.colour”时,它就可以了。

请帮帮我吗?

2 个答案:

答案 0 :(得分:1)

使用字典按名称存储颜色值:

colors = { "WH": (255, 255, 255),
           "RE": (255, 0, 0),
         }

然后使用传递给-c选项的字符串访问正确的颜色:

pygame.draw.line(screen, colors[args.colour], (nSX), (nSY), (nEX,nEY), 1)

答案 1 :(得分:0)

您需要将-c作为字符串传递。用引号括起来:

parser.add_argument('-c', action='store', dest='colour', type=str, 
                    help='Choose Colour')

否则python将传递变量-c的值,无论它是什么。希望它有所帮助!

编辑:哦,那不是问题......哈哈哈

嗯,无论如何我都知道它到底是什么。当您将WH作为参数传递给脚本时,您传递变量WH的值 - 即255, 255, 255 - 而是您'将字符串文字"WH"作为参数传递给draw.line。因此错误。

要解决此问题,您应指定参数nargs,并放弃type参数,因为后者不需要:

parser.add_argument('-c', action='store', dest='colour', nargs=3,
                    help='Choose Colour')
...
colours = (int(i) for i in args.colours)
pygame.draw.line(screen, *colours,(nSX),(nSY),(nEX,nEY),1)

当你运行它时:

python LineGenerator.py -c 255, 255, 255

这就是全部!希望它有所帮助!