У меня есть набор кода Python, который в основном выполняется через точки входа в инфраструктуру Click CLI.
Я изучаю, как превратить некоторые функции 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) как веб-действие. Я получаю следующую ошибку
{
"error": "The action did not produce a valid JSON response: Internal Server Error"
}
Я видел в некоторых других блогах, что запуск python с -i
является хорошей проверкой работоспособности 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 / IBM Cloud Functions?
- Я пытался заставить щелкнуть
standalone_mode
, чтобы изменить SystemExit
поведение, но не смог заставить его работать
- Я также пытался это сделать, назвав команду
echo
и используя опцию --main echo
при создании действия OpenWhisk. (Тот же результат)
- Я также пробовал много вариантов возврата JSON String (через
json.dumps()
), либо через return, либо через запись в stdout, как в zip-упаковке, так и в Docker-упаковке ... (те же результаты)
Поскольку словарь python является в основном жестко запрограммированным результатом, сейчас я лучше всего полагаю, что эта трассировка стека при запуске скрипта с включенным кликом является корнем моей проблемы при развертывании в IBM Cloud Functions.
Заранее спасибо.
Дополнительная информация в ответ на комментарии
Код предоставлен выше. Этот код находится в файле с именем __main__.py
(согласно IBM Docs 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"
единственное требование в needs.txt - click
затем также по IBM Docs
zip -r hello_too.zip virtualenv __main__.py
и проверка работоспособности
python -i hello_too.zip
Выдает исключение SystemExit / трассировку стека, как в примере выше.
Но
python hello_too.zip
завершается нормально.
Затем разверните в облачные функции / веб-действия
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, я застреваю.