从 python 脚本中提取参数

Posted

技术标签:

【中文标题】从 python 脚本中提取参数【英文标题】:Extract arguments from python script 【发布时间】:2016-08-27 12:42:39 【问题描述】:

让我解释一下我的想法,以便为您提供一些背景信息。 我有一堆 python 脚本(使用 argpars 或 optpars),它们的输出通常可以在控制台上以 json、纯文本或 csv 格式显示。

我想构建一个 webapp(例如 angular + node),它为我的每个脚本自动生成一个网页,包括一些输入框,用于 python 脚本所需的任何参数,以便从 UI 运行它们.

我不想为每个 python 脚本编写它们需要运行的参数列表和类型,但我正在寻找一种自动方法来从每个 python 脚本本身中提取此类列表。

我可以尝试解析每个脚本的 -h 输出或解析脚本本身 (add_option) 但它可能容易出错。

您是否知道任何允许我自动执行此操作的工具/脚本/模块?

非常感谢。

【问题讨论】:

假设每个脚本都支持-h,也许docopt可以解析结果。 @Robᵩ 谢谢,但它看起来更像是 argparse 等的替代品.. 你误会了。我的意思是您应该运行somescript -h,捕获输出,将该输出传递给docopt 的解析器,然后使用生成的数据结构来生成您的html。您不会按预期使用doctopt Docopt 使选项定义成为 -h 输出,因此它有助于 argparse 容易出现不一致的地方。 @Robᵩ 很酷的想法,但是,我刚刚做了一个测试,它对我有用,例如 """test.py INPUT] [-o OUTPUT] 可选参数:-h,--help 显示此帮助消息并退出 -i INPUT,--input INPUT 输入日志文件 -o OUTPUT,--output OUTPUT 输出 """ 被解析为: '--help': False, '--input': None, '--output': None 自己也能获得帮助会很酷 【参考方案1】:

inspect 模块将在这里提供帮助:

>>> import inspect
>>> def example_function(a, b, c=1234):
        pass
>>> inspect.getargspec(example_function)
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=(1234,))

【讨论】:

plac 包 (pypi.python.org/pypi/plac) 像这样使用inspect 创建一个可以运行这样一个函数的解析器。它创建与函数参数相对应的参数。但我认为这对检查已经在使用 argparse 的脚本没有帮助。【参考方案2】:

您可能需要详细说明您对脚本及其解析器的访问权限。它们是只能通过-h 调用并返回帮助或使用消息的黑匣子,还是可以检查parser

例如,当使用argparse 时,您创建一个parser,为其分配一些属性并创建参数Actions。这些操作对象被收集在一个列表中,parser._actions

查看parser.format_helpparser.format_usage 方法以查看传递给帮助格式化程序以创建字符串显示的值。

除了检查argparse.py 文件外,我建议在交互式会话中创建解析器,并检查创建的对象。

【讨论】:

以上是关于从 python 脚本中提取参数的主要内容,如果未能解决你的问题,请参考以下文章

将 Access 表单上命令按钮的参数传递给 python 脚本

从 url 查询字符串参数中提取单独的值

Python C 扩展:从引擎中提取参数

Python-Requests,从字符串中提取url参数

python中如何从字符串中提取数字?

将参数从批处理文件发送到 Python 脚本