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 модуль.

Другие вопросы по тегам