【发布时间】:2018-12-07 17:38:08
【问题描述】:
我有一堆基本上是通过 Click CLI 框架入口点执行的 python 代码。
我正在探索如何将一些 CLI 函数制作成 WebActions,并且正在寻找 IBM Cloud Functions,它基本上是 Apache OpenWhisk。
我是 OpenWhisk 和 IBM CloudFunctions 的新手。
我在这里关注帮助文档:
https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions
试图模仿 virtualenv 方法。
当我将他们的基本示例翻译为 Click CLI 命令时,如下所示:
(以下是文件__main__.py 的内容,该文件最初是一个名为hello_too.py 的文件,但随着IBM Docs 的变化如下)
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 操作我收到以下错误
{
"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 CLI 脚本移植为 OpenWhisk Actions / IBM Cloud Functions 的最简单路径的任何建议?
- 我尝试点击
standalone_mode来更改SystemExit的行为,但似乎无法正常工作 - 我还尝试了将命令命名为
echo并在 OpenWhisk 操作创建上使用--main echo选项。 (结果相同) - 我还尝试了多种返回 JSON 字符串的变体(通过
json.dumps()),无论是通过返回还是通过写入标准输出,都采用 zip 打包和 Docker 映像打包...(结果相同)
由于 python 字典基本上是硬编码的结果,我现在最好的猜测是运行单击启用脚本时的堆栈跟踪是我部署到 IBM Cloud Functions 时问题的根源。
提前致谢。
响应 cmets 的附加信息
上面提供的代码。该代码位于名为 __main__.py 的文件中(根据 IBM Docs https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html#creating-python-actions )
然后按照 IBM Docs 的...
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 Docs
zip -r hello_too.zip virtualenv __main__.py
和健全性检查
python -i hello_too.zip
引发类似于上面示例的 SystemExit 异常/堆栈跟踪。
但是
python hello_too.zip
正常完成。
然后部署到 Cloud Functions / Web Actions
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中的示例代码相同
所以我假设这不是问题的根本原因。 (我运行了他们的示例代码,如文档中所述并返回 Python dict 工作正常。)
只是当我尝试使用点击版本的python时,我卡住了。
【问题讨论】:
-
提供您如何创建操作以及如何调用它的代码。
-
@data_henrik 我在原始帖子中添加了其他信息
-
我确实复制了这个错误并在下面添加了评论。您不能使用
click模块,该模块用于在非 CLI 环境中构建 CLI 工具。
标签: python python-2.7 ibm-cloud openwhisk