我有一堆python代码,基本上是通过Click框架入口点执行的。
我正在探索如何将一些CLI函数转化为WebActions,并且正在研究IBM函数,它基本上是Apache。
我是OpenWhisk和IBM CloudFunctions的新手。
我在这里跟随帮助医生:
actions.html#creating-python-actions
试图模仿virtualenv方法
当我将它们的基本示例转换为Click命令时,如下所示:
(下面是一个文件__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()然后将其压缩并上传(根据他们的虚拟实例)作为web操作,我得到以下错误
{
"error": "The action did not produce a valid JSON response: Internal Server Error"
}我在其他一些博客上看到,使用-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但是,当我运行示例代码时,启用了非点击功能,交互式解释器就会发出抱怨。
在最简单的路径上,有什么建议可以将Click脚本移植为OpenWhisk操作/ IBM函数?
standalone_mode来更改SystemExit行为,但似乎无法使其正常工作。echo,并在OpenWhisk操作create上使用--main echo选项。(结果相同)json.dumps()),无论是通过返回还是通过写到标准输出,无论是在zip打包中还是在Docker图像打包中.(结果相同)由于python字典基本上是硬编码的结果,我现在最好的猜测是,运行单击启用脚本时的堆栈跟踪是部署到IBM函数时问题的根源。
提前谢谢。
回应意见的补充资料
以上提供的代码。该代码位于一个名为__main__.py的文件中(根据IBM 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" requirements.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部分actions.html#creating-python-actions”中的示例代码相同。
所以我假设这不是问题的根本原因。(我运行了它们的示例代码,如文档中所概述的,返回Python很好。)
当我尝试使用点击版本的python时,我就被卡住了。
发布于 2018-06-29 09:03:14
click模块导致运行时错误,从而扼杀了运行代码的底层process。
click模块用于构建命令行接口工具。OpenWhisk操作的Python由现有的Python动态评估和调用。您需要重新考虑应用程序,以便通过原始函数公开核心函数,而不是click模块。
https://stackoverflow.com/questions/51086251
复制相似问题