Запустите Python HttpServer, прежде чем запускать проект iOS в Xcode - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь запустить http-сервер перед запуском проекта iOS. Я добавил скрипт python -m SimpleHTTPServer 9527 в Run Script. enter image description here Это нормально, когда я запускаю его в Терминале, Но когда я нажал кнопку Run в Xcode, она остановилась как

enter image description here

Когда я остановил проект , Xcode показал некоторый журнал ошибок:

Обслуживание HTTP на 0.0.0.0 порту 9527 ... Traceback (последний вызов был последним): Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", строка 162, в _run_module_as_main " main ", fname, loader, pkg_name) Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", строка 72, в _run_code исполняемый код в run_globals Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SimpleHTTPServer.py", строка 235, в тестовое задание() Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SimpleHTTPServer.py", строка 231, в тесте BaseHTTPServer.test (HandlerClass, ServerClass) Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/BaseHTTPServer.py", строка 599, в тесте httpd.serve_forever () Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", строка 236, в serve_forever poll_interval) Файл "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/SocketServer.py", строка 155, в _eintr_retry return func (* args) KeyboardInterrupt

Пожалуйста, помогите или попробуйте дать некоторые идеи, как этого добиться. Заранее спасибо.

1 Ответ

0 голосов
/ 07 мая 2018

Ваша сборка остается на этом этапе, потому что выполняемая вами команда не прекратит работу, пока вы не запросите ее. Скорее всего, веб-сервер работает правильно, однако XCode ожидает его завершения, чего не произойдет, пока вы не нажмете кнопку «Стоп».

Трассировка стека, которую вы видите, нормальна, когда вы останавливаете встроенный веб-сервер в Python. Вы увидите подобное сообщение, если вы используете CTRL + C для выхода из него при использовании терминала.

Как правило, на этапах «Выполнение оболочки» в вашей сборке должны запускаться команды, которые выполняют задачу, а затем завершаются сами по себе, однако, если вы пытаетесь запустить веб-сервер на время сборки, вам потребуется использовать две фазы. Один этап в начале сборки для запуска веб-сервера и его разветвления, а другой этап в конце сборки для его завершения. Хотя по моему опыту переменные не сохраняются между фазами сборки, вы можете записать PID в файл и затем прочитать его на более позднем этапе.

Помимо этого решения, я бы предложил переосмыслить, нужно ли запускать сервер как часть вашей сборки. Если вы начнете использовать некоторые из Continuous Integration в будущем или просто захотите запустить несколько сборок одновременно, дополнительные сложности с выделением номеров портов вызовут проблему.

...