我正在从Java (openjdk 1.7.0_85)
运行python进程:
ProcessBuilder pb = new ProcessBuilder(bin, processJar, Integer.toString(port), Integer.toString(portRev), path, extl, thriftc, thrifts, thriftd);
pb.inheritIO();
pb.redirectErrorStream(true);
pb.directory(new File(dir));
try {
logger.trace("Start process");
lock.lock();
process = pb.start();
cond.await();
lock.unlock();
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
我设置pb.inheritIO()
将python打印重定向到标准输出。如果我的python进程做了一些简单的事情,流的重定向就会按预期工作。
我正在使用thriftpy (0.3.2)
进行Java-Python
通信。 Python进程在一个线程中打开一个thrift服务器:
def __run_server(self, serverport):
t = Globals.thrifts.split(',')
thrifts = thriftpy.load(t[0], module_name="processsideserver_thrift", include_dirs=[t[1]])
self.server = make_server(thrifts.ProcessSideServer, self, '127.0.0.1', serverport)
def run(self):
if self.can_run == True:
self.running = True
try:
self.server.serve()
except Exception:
''
因为self.server.serve()
是阻止函数。由于这条线,我的流重定向停止工作。应用程序和Java-Python通信工作正常。但是在控制台中没有显示python打印。
Thrifpy代码如下:
def serve(self):
self.trans.listen()
while not self.closed:
try:
client = self.trans.accept()
t = threading.Thread(target=self.handle, args=(client,))
t.setDaemon(self.daemon)
t.start()
except KeyboardInterrupt:
raise
except Exception as x:
logging.exception(x)
为什么会这样?因为deamon线程?我怎么能强制重定向流?