无法打印与子流程一起运行的python脚本的输出
我尝试测试服务器,并希望在测试结束时在这里打印输出无法打印与子流程一起运行的python脚本的输出,python,subprocess,Python,Subprocess,我尝试测试服务器,并希望在测试结束时在这里打印输出 class TestHandler(TestCase): def setUp(self): cmd = [ 'python', '-m', 'server', '-f', write_to_path, '--debug' ] self.server = Popen(cmd, universal_newlines=Tr
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是空的,但执行了服务器代码(我用pdb在server/\uu main\uuuu.py中测试了它的main函数)
我在stackowerflow上尝试了将近3个小时的答案,但没有一个有效,我放弃了。终止信号处理不当 是 变成
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()
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()