2016-12-27 156 views
0

我嘗試測試服務器,並希望將其打印輸出在這裏的測試不能打印與子進程運行Python腳本的輸出

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和犯錯是空的,但服務器代碼被執行(與PDB我測試了它的主要功能在服務器/ __ main__.py)

~/Documents/LINGUALEO/lingualeo2anki $ python -m unittest 
.kill 

. 
---------------------------------------------------------------------- 
Ran 2 tests in 2.006s 

OK 

Source here

我試過stackowerflow將近3小時,沒有他很多答案我放棄了。

回答

0

終止信號處理不當。

當時

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()