Python可执行文件中的kwargs参数

5

我正在尝试创建一个可以在命令行中调用的程序,并在Python 2.6中使用关键字参数。到目前为止,我已经尝试过:

#!/usr/bin/python
def read(foo = 5):
    print foo
    return 0
if __name__ == '__main__'
    read()

当我尝试从命令行运行以下代码:./test.py时,程序按预期打印出5。是否有一种方法可以使用./test.py foo=6?我想保留关键字参数。
这似乎是一个简单的问题,但我没有找到一个好的解决方案。

2
请查看argparse模块,该模块专门用于此目的。 - Rohit Jain
3个回答

6
Python内置了一个库来帮助您将命令行参数传递给脚本,它叫做argparse。不过,与您在问题中描述的有点不同...
基本上,您可以通过sys.argv访问所有命令行参数,它将是一个参数列表。
抱歉,应该提到Python 2.6库称为optparse

感谢您的快速评论。不幸的是,我正在使用Python 2.6,因此argparse不可用,而且我还没有弄清楚如何使用关键字参数的sys.argv,但我仍在尝试中。 - greatscott
1
@greatscott:在Python2.6中有getopt,这应该适合你的情况。 - SilentGhost
@dm:已编辑以反映Python版本。 感谢所有的帮助。我明天会研究一下getoptoptparse - greatscott

3

Something like this?

if __name__ == '__main__':
    kwargs = dict(x.split('=', 1) for x in sys.argv[1:])
    read(**kwargs)

话虽如此,argparse和optparse可能会为您提供更健壮和更自然的东西,对于习惯于命令行的人来说更容易理解。 (更不用说,支持类型为字符串以外的参数了。)

哦,如果您真正想要的是只是交互使用您的函数,请使用交互式解释器; 无论是python还是ipython。 您需要将代码放入以.py结尾的文件中并导入它,然后就可以直接调用它。


谢谢。实际上我是为一个同事写这个程序,他想要通过命令行运行所有东西,而不是通过 pythonipython 工作。虽然我很感激你的帮助,但我会查看 optparse 的。 - greatscott

1
一个不太常见但非常有趣的选择是docopt:这是一个库,它可以从您为程序编写的帮助信息中生成参数解析器(on github)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接