1. 创造日志handler: 在status_only模式,不需要日志以及UI

    # Ensure logging messages get sent to the UI as events
handler = bb.event.LogHandler()
if not configParams.status_only:
# In status only mode there are no logs and no UI
logger.addHandler(handler)

2. 取得ui模块并设置特征集:

    if configParams.server_only:
featureset = []
ui_module = None
else:
ui_module = import_extension_module(bb.ui, configParams.ui, 'main')
# Collect the feature set for the UI
featureset = getattr(ui_module, "featureSet", []) if extrafeatures:
for feature in extrafeatures:
if not feature in featureset:
featureset.append(feature)

3. 远程模式下返回远程server连接:

    server_connection = None

    if configParams.remote_server:
# Connect to a remote XMLRPC server
server_connection = bb.server.xmlrpcclient.connectXMLRPC(configParams.remote_server, featureset,
configParams.observe_only, configParams.xmlrpctoken)

4. 本地模式下返回本地server连接:

    else:
retries = 8
while retries:
try:
topdir, lock = lockBitbake()
sockname = topdir + "/bitbake.sock"
if lock:
if configParams.status_only or configParams.kill_server:
logger.info("bitbake server is not running.")
lock.close()
return None, None
# we start a server with a given configuration
logger.info("Starting bitbake server...")
# Clear the event queue since we already displayed messages
bb.event.ui_queue = []
server = bb.server.process.BitBakeServer(lock, sockname, configuration, featureset) else:
logger.info("Reconnecting to bitbake server...")
if not os.path.exists(sockname):
print("Previous bitbake instance shutting down?, waiting to retry...")
i = 0
lock = None
# Wait for 5s or until we can get the lock
while not lock and i < 50:
time.sleep(0.1)
_, lock = lockBitbake()
i += 1
if lock:
bb.utils.unlockfile(lock)
raise bb.server.process.ProcessTimeout("Bitbake still shutting down as socket exists but no lock?")
if not configParams.server_only:
try:
server_connection = bb.server.process.connectProcessServer(sockname, featureset)
except EOFError:
# The server may have been shutting down but not closed the socket yet. If that happened,
# ignore it.
pass if server_connection or configParams.server_only:
break
except BBMainFatal:
raise
except (Exception, bb.server.process.ProcessTimeout) as e:
if not retries:
raise
retries -= 1
if isinstance(e, (bb.server.process.ProcessTimeout, BrokenPipeError)):
logger.info("Retrying server connection...")
else:
logger.info("Retrying server connection... (%s)" % traceback.format_exc())
if not retries:
bb.fatal("Unable to connect to bitbake server, or start one")
if retries < 5:
time.sleep(5)

5. 清理日志handler,返回服务器连接以及ui模块:

    if configParams.kill_server:
server_connection.connection.terminateServer()
server_connection.terminate()
bb.event.ui_queue = []
logger.info("Terminated bitbake server.")
return None, None # Restore the environment in case the UI needs it
for k in cleanedvars:
os.environ[k] = cleanedvars[k] logger.removeHandler(handler) return server_connection, ui_module

最新文章

  1. 较为完整的meta
  2. 1.44tft
  3. Definition of success-成功的定义
  4. [异常] Download interrupted: Connection to https://dl-ssl.google.com refused 安卓SDK下载被拒 3步解决
  5. iOS 如何使用自定义字体
  6. Session: 防止用户多次登陆
  7. Vijos P1060 盒子
  8. linux下shapely的安装
  9. Redis VS Memcached 转载
  10. NPAPI火狐插件VS2013开发示例
  11. Which PHP mode? Apache vs CGI vs FastCGI
  12. python 冒泡和快排,不多说【无聊】
  13. 房上的猫:类和对象&gt;万物皆对象
  14. redis maxheap 51200000
  15. C++ 一些特性
  16. Android系统启动流程(二)解析Zygote进程启动过程
  17. pandas的to_csv()使用方法
  18. 如何用jQuery获得select的值
  19. json传参 js前端和java后端 的简单例子
  20. python URLError,HTTPError 的异常处理

热门文章

  1. Java NIO(一)I/O模型概述
  2. Day19 网络编程
  3. 【JavaScript】JavaScript(V8)实现输入输出
  4. 使用ROS节点——Node &amp; Master——roscore、rosrun、rosnode
  5. HDU2546(01背包加一点点变形)
  6. iOS开发过程中易犯的小错误
  7. Hadoop(18)-MapReduce框架原理-WritableComparable排序和GroupingComparator分组
  8. Verilog 奇数分频
  9. c++ 创建二叉树
  10. PyQt5 简易计算器