Я пытаюсь протестировать сервер и хочу распечатать его в конце теста здесь
class TestHandler(TestCase):
def setUp(self):
cmd = [
'python', '-m', 'server',
'-f', write_to_path,
'--debug'
]
self.server = Popen(cmd, universal_newlines=True, cwd=root_dir_path,
stdout=PIPE, stderr=PIPE)
# also tried this, did not help
# cmd = [
# 'python -m server --debug -f ' + write_to_path
# ]
# self.server = Popen(cmd, shell=True, universal_newlines=True, cwd=root_dir_path,
# stdout=PIPE, stderr=PIPE)
def tearDown(self):
try:
outs, errs = self.server.communicate(timeout=2)
print(outs, errs)
except TimeoutExpired:
print("kill")
self.server.kill()
outs, errs = self.server.communicate()
print(outs, errs) # empty output here
def testWordWithoutParent(self):
pass
Когда я запускаю его, stdout и err пусты, но код сервера был выполнен (я тестировал его основную функцию в server / __ main__.py с pdb)
~/Documents/LINGUALEO/lingualeo2anki $ python -m unittest
.kill
.
----------------------------------------------------------------------
Ran 2 tests in 2.006s
OK
Я пробовал много ответов на stackowerflow почти 3 часа, и никто не помог, я сдался.
1 ответ
Сигнал завершения был обработан неправильно.
Был
try:
httpd = HTTPServer(config.server_address, Handler)
debug('http server is running...listening on port %s', config.port)
httpd.serve_forever()
except KeyboardInterrupt:
httpd.server_close()
sys.exit(0)
finally:
httpd.socket.close()
httpd.server_close()
debug("finnaly")
Стали
server = None
def close_server(signum, frame):
debug("Signal handler called with signal %s", signum)
if server:
server.server_close()
sys.exit()
server = HTTPServer(config.server_address, Handler)
signal.signal(signal.SIGINT, close_server)
signal.signal(signal.SIGTERM, close_server)
debug('http server is running...listening on port %s', config.port)
server.serve_forever()
Похожие вопросы
Новые вопросы
python
Python — это мультипарадигмальный многоцелевой язык программирования с динамической типизацией. Он предназначен для быстрого изучения, понимания и использования, а также обеспечивает чистый и унифицированный синтаксис. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Если у вас есть вопросы о версии Python, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas, NumPy) укажите это в тегах.