我有一堆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云函数,有什么建议吗?在
standalone_mode
来改变SystemExit
行为,但似乎无法使其工作echo
,并在OpenWhisk action create上使用--main echo
选项。(结果相同)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版本时,我遇到了麻烦。在
click
模块导致运行时错误,从而终止运行代码的底层Python进程。在click
模块是为构建命令行界面工具而设计的。OpenWhisk操作的Python代码由现有的Python脚本动态评估和调用。您需要重新考虑应用程序,以便通过原始函数而不是click
模块来公开核心函数。在相关问题 更多 >
编程相关推荐