Python Click、apacheopenwhisk、IBM云函数、主要系统出口问题

2024-06-16 10:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆python代码,基本上是通过Click-CLI框架入口点执行的。在

我正在研究如何将一些CLI函数转换成WebActions,并查看了IBM云函数,基本上就是apacheopenwhisk。在

我对OpenWhisk和ibmcloudfunctions是全新的。在

我遵循这里的帮助文档:

https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions

试图模仿virtualenv方法。在

当我将它们的基本示例转换为Click CLI命令时,如下所示:

(以下是文件__main__.py的内容,该文件最初是一个名为hello_too.py的文件,但随着IBM文档的变化如下)

import click

@click.command()
@click.argument('params', nargs=-1)
def main(params):
    #name = args.get("name", "stranger")
    greeting = "Hello " + "foo" + "!"
    print(greeting)
    return {"greeting": greeting}

if __name__ == "__main__":
    main()

然后压缩并上传(根据他们的virtualenv示例),作为web操作,我得到以下错误

^{pr2}$

我在其他一些博客上看到,使用-i运行python是OpenWhisk运行时的一个很好的健全性检查。在

当我用-i运行这段代码时,我得到了系统出口周围的堆栈跟踪。在

Traceback (most recent call last):
  File "hello_too.py", line 12, in <module>
    main()
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 722, in __call__
    return self.main(*args, **kwargs)
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 700, in main
    ctx.exit()
  File "/Users/mcmasty/projects/ppf-github/experiments/ibm-api-connect/venv/lib/python2.7/site-packages/click/core.py", line 484, in exit
    sys.exit(code)
SystemExit: 0

但是当我运行示例代码时,非点击启用,交互式解释器确实会抱怨。在

对于端口单击CLI脚本要成为OpenWhisk操作/IBM云函数,有什么建议吗?在

  • 我试图让click standalone_mode来改变SystemExit行为,但似乎无法使其工作
  • 我还尝试了命名命令echo,并在OpenWhisk action create上使用--main echo选项。(结果相同)
  • 我还尝试了许多返回JSON字符串的变体(通过json.dumps()),无论是通过返回还是通过写入stdout,都是在zip打包和Docker图像打包中。。。(结果相同)

由于python字典基本上是硬编码的结果,所以我现在最好的猜测是,当我部署到ibmcloud函数时,运行click-enabled脚本时的堆栈跟踪是问题的根源。在

提前谢谢。在


针对评论的其他信息

上述代码。该代码位于一个名为__main__.py的文件中(根据IBM文档https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions

然后按照IBM文档。。。在

docker run --rm -v "$PWD:/tmp" openwhisk/python2action    bash  -c "cd tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"  

唯一的要求要求.txt是click

然后还要遵循IBM文档

zip -r hello_too.zip virtualenv __main__.py  

还要做个健康检查

python -i hello_too.zip  

抛出与上面的示例类似的SystemExit异常/堆栈跟踪。在

但是

python hello_too.zip    

正常完成。在

然后部署到云函数/Web操作

ibmcloud wsk action create hello_too --kind python:2 hello_too.zip --web true 

然后通过命令行调用

ibmcloud wsk action invoke --result hello_too  

我得到以下信息:

{
"error": "The action did not produce a valid JSON response: Internal Server Error"
}  

但是硬编码的反应

return {"greeting": greeting}  

与“创建和调用Python操作部分https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions”中的示例代码相同

所以我认为这不是问题的根本原因。(我运行了他们的示例代码,如文档中所述,并返回一个Pythondict运行良好)

就在我尝试使用python的click版本时,我遇到了麻烦。在


Tags: 函数代码文档pyactions示例hellovirtualenv
1条回答
网友
1楼 · 发布于 2024-06-16 10:17:31

click模块导致运行时错误,从而终止运行代码的底层Python进程。在

click模块是为构建命令行界面工具而设计的。OpenWhisk操作的Python代码由现有的Python脚本动态评估和调用。您需要重新考虑应用程序,以便通过原始函数而不是click模块来公开核心函数。在

相关问题 更多 >