首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python、Apache OpenWhisk、IBM函数、主要系统退出问题

Python、Apache OpenWhisk、IBM函数、主要系统退出问题
EN

Stack Overflow用户
提问于 2018-06-28 15:08:37
回答 1查看 360关注 0票数 0

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

我正在探索如何将一些CLI函数转化为WebActions,并且正在研究IBM函数,它基本上是Apache。

我是OpenWhisk和IBM CloudFunctions的新手。

我在这里跟随帮助医生:

actions.html#creating-python-actions

试图模仿virtualenv方法

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

(下面是一个文件__main__.py的内容,它最初是一个名为hello_too.py的文件,但与IBM一起更改如下)

代码语言:javascript
复制
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操作,我得到以下错误

代码语言:javascript
复制
{
  "error": "The action did not produce a valid JSON response: Internal Server Error"
}

我在其他一些博客上看到,使用-i运行python对于OpenWhisk运行时来说是一个很好的明智检查。

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

代码语言:javascript
复制
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字符串的变体(通过json.dumps()),无论是通过返回还是通过写到标准输出,无论是在zip打包中还是在Docker图像打包中.(结果相同)

由于python字典基本上是硬编码的结果,我现在最好的猜测是,运行单击启用脚本时的堆栈跟踪是部署到IBM函数时问题的根源。

提前谢谢。

回应意见的补充资料

以上提供的代码。该代码位于一个名为__main__.py的文件中(根据IBM actions.html#creating-python-actions )

然后跟随IBM文档它的..。

代码语言:javascript
复制
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进行跟踪。

代码语言:javascript
复制
zip -r hello_too.zip virtualenv __main__.py  

还有一张健全的支票

代码语言:javascript
复制
python -i hello_too.zip  

引发类似于上面示例的SystemExit异常/堆栈跟踪。

代码语言:javascript
复制
python hello_too.zip    

正常完成。

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

代码语言:javascript
复制
ibmcloud wsk action create hello_too --kind python:2 hello_too.zip --web true 

然后通过命令行调用

代码语言:javascript
复制
ibmcloud wsk action invoke --result hello_too  

我收到以下信息:

代码语言:javascript
复制
{
"error": "The action did not produce a valid JSON response: Internal Server Error"
}  

但是硬编码的反应

代码语言:javascript
复制
return {"greeting": greeting}  

与“创建和调用Python部分actions.html#creating-python-actions”中的示例代码相同。

所以我假设这不是问题的根本原因。(我运行了它们的示例代码,如文档中所概述的,返回Python很好。)

当我尝试使用点击版本的python时,我就被卡住了。

EN

回答 1

Stack Overflow用户

发布于 2018-06-29 09:03:14

click模块导致运行时错误,从而扼杀了运行代码的底层process。

click模块用于构建命令行接口工具。OpenWhisk操作的Python由现有的Python动态评估和调用。您需要重新考虑应用程序,以便通过原始函数公开核心函数,而不是click模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51086251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档