Python Click, Apache OpenWhisk, функции IBM Cloud, основные проблемы с выходом из системы
У меня есть куча кода Python, который в основном выполняется через точки входа Click CLI Framework.
Я изучаю, как превратить некоторые функции CLI в WebActions, и искал IBM Cloud Functions, в основном Apache OpenWhisk.
Я новичок в OpenWhisk и IBM CloudFunctions.
Я следую за Справочной документацией здесь:
https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html
пытаясь имитировать метод virtualenv.
Когда я перевожу их основной пример, нажмите Команды 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 Actions / IBM Cloud Functions?
- Я пытался получить клик
standalone_mode
изменитьSystemExit
поведение, но не может заставить его работать - Я также попробовал это с именованием команды
echo
и используя--main echo
опция на OpenWhisk действие создать. (Тот же результат) - Я также попробовал много вариантов возврата строки JSON (через
json.dumps()
) либо через возврат, либо через запись в stdout, как в zip-упаковке, так и в Docker-упаковке... (те же результаты)
Поскольку словарь python - это, по сути, жестко запрограммированный результат, сейчас я думаю, что эта трассировка стека при запуске скрипта с включенным кликом является корнем моей проблемы при развертывании в IBM Cloud Functions.
Заранее спасибо.
Дополнительная информация в ответ на комментарии
Код предоставлен выше. Этот код находится в файле с именем __main__.py
(в соответствии с Документами IBM https://console.bluemix.net/docs/openwhisk/openwhisk_actions.html)
затем, следуя Документам IBM, его...
docker run --rm -v "$PWD:/tmp" openwhisk/python2action bash -c "cd tmp && virtualenv virtualenv && source virtualenv/bin/activate && pip install -r requirements.txt"
единственное требование в require.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
поэтому я предполагаю, что это не является основной причиной проблемы. (Я запустил их пример кода, как указано в документации и возвращая Python dict
работал нормально.)
Просто когда я пытаюсь использовать клик-версию python, я застреваю.
1 ответ
click
Модуль вызывает ошибку во время выполнения, которая убивает основной процесс Python, выполняющий код.
click
Модуль предназначен для построения инструментов интерфейса командной строки. Код Python для действий OpenWhisk динамически оценивается и вызывается существующим скриптом Python. Вам нужно будет перефакторизовать ваше приложение, чтобы раскрыть основные функции через необработанные функции, чем click
модуль.