• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python db_mysql.DBMysql类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中shinken.db_mysql.DBMysql的典型用法代码示例。如果您正苦于以下问题:Python DBMysql类的具体用法?Python DBMysql怎么用?Python DBMysql使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了DBMysql类的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: init

    def init(self):
        logger.log("I connect to NDO database")
        self.db = DBMysql(self.host, self.user, self.password, self.database, 
                          self.character_set, table_prefix='nagios_', port=self.port)
        self.connect_database()

        # Cache for hosts and services
        # The structure is as follow:
        # First the instance id then the host / (host,service desc) to access the wanted data
        self.services_cache_sync = {}
        self.hosts_cache_sync = {}

        # We need to search for centreon_specific fields, like long_output
        query = u"select TABLE_NAME from information_schema.columns where TABLE_SCHEMA='ndo' and TABLE_NAME='nagios_servicestatus' and COLUMN_NAME='long_output';"
        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            self.centreon_version = False
        else:
            self.centreon_version = True
            logger.log("[MySQL/NDO] Using the centreon version")

        # Cache for database id
        # In order not to query the database every time
        self.database_id_cache = {}

        # Mapping service_id in Shinken and in database
        # Because can't acces host_name from a service everytime :(
        self.mapping_service_id = {}

        # Todo list to manage brok
        self.todo = []
开发者ID:jfbutkiewicz,项目名称:Windows-Setup-for-Shinken,代码行数:32,代码来源:ndodb_mysql_broker.py


示例2: init

    def init(self):
        from shinken.db_mysql import DBMysql
        logger.info("[glpidb] Creating a mysql backend : %s (%s)" % (self.host, self.database))
        self.db_backend = DBMysql(self.host, self.user, self.password, self.database, self.character_set)

        logger.info("[glpidb] Connecting to database ...")
        self.db_backend.connect_database()
        logger.info("[glpidb] Connected")
开发者ID:shinken-debian-modules,项目名称:shinken-mod-glpidb,代码行数:8,代码来源:module.py


示例3: init

    def init(self):
        print "I connect to NDO database"
        self.db = DBMysql(self.host, self.user, self.password, self.database, self.character_set, table_prefix='nagios_')
        self.connect_database()

        #Cache for hosts and services
        #will be flushed when we got a net instance id
        #or something like that
        self.services_cache = {}
        self.hosts_cache = {}
开发者ID:zoranzaric,项目名称:shinken,代码行数:10,代码来源:ndodb_mysql_broker.py


示例4: TestConfig

class TestConfig(ShinkenTest):
    # setUp is inherited from ShinkenTest

    def create_db(self):
        self.db = DBMysql(host='localhost', user='root', password='root', database='merlin', character_set='utf8')

    def test_connect_database(self):
        if not DBMysql:
            return
        self.create_db()
        try:
            self.db.connect_database()
        except Exception:  # arg, no database here? sic!
            pass

    def test_execute_query(self):
        if not DBMysql:
            return
        self.create_db()
        try:
            self.db.connect_database()
            q = "DELETE FROM service WHERE instance_id = '0'"
            self.db.execute_query(q)
        except Exception:
            pass
开发者ID:David-,项目名称:shinken,代码行数:25,代码来源:test_db_mysql.py


示例5: __init__

    def __init__(self, modconf, host=None, user=None, password=None, database=None, character_set=None, database_path=None):
        #Mapping for name of data, rename attributes and transform function
        self.mapping = {
           #Host
           'host_check_result' : {
               'plugin_monitoring_services_id' : {'transform' : None},
               'event' : {'transform' : None},
               'perf_data' : {'transform' : None},
               'output' : {'transform' : None},
               'state' : {'transform' : None},
               'latency' : {'transform' : None},
               'execution_time' : {'transform' : None},
               'state_type' : {'transform' : None},
               },
           #Service
           'service_check_result' : {
               'plugin_monitoring_services_id' : {'transform' : None},
               'plugin_monitoring_servicescatalogs_id' : {'transform' : None},
               'event' : {'transform' : None},
               'perf_data' : {'transform' : None},
               'output' : {'transform' : None},
               'state' : {'transform' : None},
               'latency' : {'transform' : None},
               'execution_time' : {'transform' : None},
               'state_type' : {'transform' : None},
               }
           }
        # Last state of check
#        self.checkstatus = {
#           '0' : None,
#           }
        BaseModule.__init__(self, modconf)
        self.host = host
        self.user = user
        self.password = password
        self.database = database
        self.character_set = character_set
        self.database_path = database_path
        
        from shinken.db_mysql import DBMysql
        print "Creating a mysql backend"
        self.db_backend = DBMysql(host, user, password, database, character_set)
开发者ID:Morkxy,项目名称:shinken,代码行数:42,代码来源:glpidb_broker.py


示例6: Ndodb_Mysql_broker

class Ndodb_Mysql_broker(BaseModule):
    def __init__(self, conf):
        BaseModule.__init__(self, conf)
        # Mapping for name of dataand transform function
        self.mapping = {
            "program_status": {
                "program_start": {"name": "program_start_time", "transform": de_unixify},
                "pid": {"name": "process_id", "transform": None},
                "last_alive": {"name": "status_update_time", "transform": de_unixify},
                "is_running": {"name": "is_currently_running", "transform": None},
            }
        }

        self.host = conf.host
        self.user = conf.user
        self.password = conf.password
        self.database = conf.database
        self.character_set = conf.character_set

    # Called by Broker so we can do init stuff
    # TODO : add conf param to get pass with init
    # Conf from arbiter!
    def init(self):
        print "I connect to NDO database"
        self.db = DBMysql(
            self.host, self.user, self.password, self.database, self.character_set, table_prefix="nagios_"
        )
        self.connect_database()

        # Cache for hosts and services
        # will be flushed when we got a net instance id
        # or something like that
        self.services_cache = {}
        self.hosts_cache = {}

    # Get a brok, parse it, and put in in database
    # We call functions like manage_ TYPEOFBROK _brok that return us queries
    def manage_brok(self, b):
        # We've got problem with instance_id == 0 so we add 1 every where
        if "instance_id" in b.data:
            b.data["instance_id"] = b.data["instance_id"] + 1
        # print "(Ndo) I search manager:", manager
        queries = BaseModule.manage_brok(self, b)
        if queries is not None:
            for q in queries:
                self.db.execute_query(q)
            return
        # print "(ndodb)I don't manage this brok type", b

    # Create the database connection
    # TODO : finish (begin :) ) error catch and conf parameters...
    def connect_database(self):
        self.db.connect_database()

    def get_host_object_id_by_name(self, host_name):
        # First look in cache.
        if host_name in self.hosts_cache:
            return self.hosts_cache[host_name]

        # Not in cache, not good
        query = u"SELECT object_id from nagios_objects where name1='%s' and objecttype_id='1'" % host_name
        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            return 0
        else:
            self.hosts_cache[host_name] = row[0]
            return row[0]

    def get_hostgroup_object_id_by_name(self, hostgroup_name):
        query = u"SELECT object_id from nagios_objects where name1='%s' and objecttype_id='3'" % hostgroup_name
        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            return 0
        else:
            return row[0]

    def get_service_object_id_by_name(self, host_name, service_description):
        # first look in cache
        if (host_name, service_description) in self.services_cache:
            return self.services_cache[(host_name, service_description)]

        # else; not in cache :(
        query = u"SELECT object_id from nagios_objects where name1='%s' and name2='%s' and objecttype_id='2'" % (
            host_name,
            service_description,
        )
        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            return 0
        else:
            self.services_cache[(host_name, service_description)] = row[0]
            return row[0]

    def get_servicegroup_object_id_by_name(self, servicegroup_name):
        query = u"SELECT object_id from nagios_objects where name1='%s' and objecttype_id='4'" % servicegroup_name
        self.db.execute_query(query)
        row = self.db.fetchone()
#.........这里部分代码省略.........
开发者ID:wAmpIre,项目名称:shinken,代码行数:101,代码来源:ndodb_mysql_broker.py


示例7: Ndodb_Mysql_broker

class Ndodb_Mysql_broker(BaseModule):

    """ This Class is a plugin for the Shinken Broker. It is in charge
    to brok information into the database. For the moment
    only Mysql is supported. This code is __imported__ from Broker.
    The managed_brok function is called by Broker for manage the broks. It calls
    the manage_*_brok functions that create queries, and then run queries.

    """

    def __init__(self, conf):
        BaseModule.__init__(self, conf)
        # Mapping for name of data and transform function
        self.mapping = {
            'program_status': {
                'program_start': {'name': 'program_start_time', 'transform': de_unixify},
                'pid': {'name': 'process_id', 'transform': None},
                'last_alive': {'name': 'status_update_time', 'transform': de_unixify},
                'is_running': {'name': 'is_currently_running', 'transform': None},
                'last_log_rotation': {'name': 'last_log_rotation', 'transform': de_unixify},
                'last_command_check': {'name': 'last_command_check', 'transform': de_unixify}
                },
            }

        self.host = conf.host
        self.user = conf.user
        self.password = conf.password
        self.database = conf.database
        self.character_set = conf.character_set
        self.port = int(getattr(conf, 'port', '3306'))
        self.prefix = getattr(conf, 'prefix', 'nagios_')

        # Centreon ndo add some fields like long_output
        # that are not in the vanilla ndo
        self.centreon_version = False
        self.synchronize_database_id = int(conf.synchronize_database_id)

    # Called by Broker so we can do init stuff
    # TODO: add conf param to get pass with init
    # Conf from arbiter!
    def init(self):
        logger.info("I connect to NDO database")
        self.db = DBMysql(self.host, self.user, self.password, self.database,
                          self.character_set, table_prefix=self.prefix,
                          port=self.port)
        self.connect_database()

        # Cache for hosts and services
        # The structure is as follow:
        # First the instance id then the host / (host,service desc)
        # to access the wanted data
        self.services_cache_sync = {}
        self.hosts_cache_sync = {}

        # We need to search for centreon_specific fields, like long_output
        query = u"select TABLE_NAME from information_schema.columns " \
                "where TABLE_SCHEMA='ndo' and " \
                "TABLE_NAME='%sservicestatus' and " \
                "COLUMN_NAME='long_output';" % self.prefix

        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            self.centreon_version = False
        else:
            self.centreon_version = True
            logger.info("[MySQL/NDO] Using the centreon version")

        # Cache for database id
        # In order not to query the database every time
        self.database_id_cache = {}

        # Mapping service_id in Shinken and in database
        # Because can't acces host_name from a service everytime :(
        self.mapping_service_id = {}

        # Todo list to manage brok
        self.todo = {}

    # Get a brok, parse it, and put in in database
    # We call functions like manage_ TYPEOFBROK _brok that return us queries
    def manage_brok(self, b):
        # We need to do some brok mod, so we copy it
        new_b = copy.deepcopy(b)

        # If we synchronize, must look for id change
        if self.synchronize_database_id != 0 and 'instance_id' in new_b.data:
            # If we use database sync, we have to synchronize database id
            # so we wait for the instance name
            brok_id = new_b.data['instance_id']
            converted_instance_id = self.convert_id(brok_id)
            if converted_instance_id is not None:
                new_b.data['instance_id'] = converted_instance_id
                queries = BaseModule.manage_brok(self, new_b)
                if queries is not None:
                    for q in queries:
                        self.db.execute_query(q)

            if converted_instance_id is None:
                if brok_id in self.todo:
#.........这里部分代码省略.........
开发者ID:sckevmit,项目名称:shinken,代码行数:101,代码来源:ndodb_mysql_broker.py


示例8: Glpidb_broker

class Glpidb_broker(BaseModule):
    def __init__(self, modconf, host=None, user=None, password=None, database=None, character_set=None, database_path=None):
        #Mapping for name of data, rename attributes and transform function
        self.mapping = {
           #Host
           'host_check_result' : {
               'plugin_monitoring_services_id' : {'transform' : None},
               'event' : {'transform' : None},
               'perf_data' : {'transform' : None},
               'output' : {'transform' : None},
               'state' : {'transform' : None},
               'latency' : {'transform' : None},
               'execution_time' : {'transform' : None},
               'state_type' : {'transform' : None},
               },
           #Service
           'service_check_result' : {
               'plugin_monitoring_services_id' : {'transform' : None},
               'plugin_monitoring_servicescatalogs_id' : {'transform' : None},
               'event' : {'transform' : None},
               'perf_data' : {'transform' : None},
               'output' : {'transform' : None},
               'state' : {'transform' : None},
               'latency' : {'transform' : None},
               'execution_time' : {'transform' : None},
               'state_type' : {'transform' : None},
               }
           }
        # Last state of check
#        self.checkstatus = {
#           '0' : None,
#           }
        BaseModule.__init__(self, modconf)
        self.host = host
        self.user = user
        self.password = password
        self.database = database
        self.character_set = character_set
        self.database_path = database_path
        
        from shinken.db_mysql import DBMysql
        print "Creating a mysql backend"
        self.db_backend = DBMysql(host, user, password, database, character_set)



    #Called by Broker so we can do init stuff
    #TODO : add conf param to get pass with init
    #Conf from arbiter!
    def init(self):
        print "I connect to Glpi database"
        self.db_backend.connect_database()




    def preprocess(self, type, brok, checkst):
        new_brok = copy.deepcopy(brok)        
        #Only preprocess if we can apply a mapping
        if type in self.mapping:
            #print "brok data : ", brok.data
            try:
                s = brok.data['service_description'].split('-')
                try:
                    if 'businessrules' in s[2]:
                        new_brok.data['plugin_monitoring_servicescatalogs_id'] = s[1]
                except:
                    new_brok.data['plugin_monitoring_services_id'] = s[1]
                    new_brok.data['event'] = brok.data['output']
            except:
                try:
                    s = brok.data['host_name'].split('-')
                    new_brok.data['plugin_monitoring_services_id'] = s[1]
                    new_brok.data['event'] = brok.data['output']
                except: 
                    pass
            to_del = []
            to_add = []
            mapping = self.mapping[brok.type]
            for prop in new_brok.data:
            #ex : 'name' : 'program_start_time', 'transform'
                if prop in mapping:
                    #print "Got a prop to change", prop
                    val = new_brok.data[prop]
                    if mapping[prop]['transform'] is not None:
                        print "Call function for", type, prop
                        f = mapping[prop]['transform']
                        val = f(val)
                    name = prop
                    if 'name' in mapping[prop]:
                        name = mapping[prop]['name']
                    to_add.append((name, val))
                    to_del.append(prop)
                else:
                    to_del.append(prop)
            for prop in to_del:
                del new_brok.data[prop]
            for (name, val) in to_add:
                new_brok.data[name] = val
        else:
#.........这里部分代码省略.........
开发者ID:Morkxy,项目名称:shinken,代码行数:101,代码来源:glpidb_broker.py


示例9: create_db

 def create_db(self):
     self.db = DBMysql(host='localhost', user='root', password='root', database='merlin', character_set='utf8')
开发者ID:David-,项目名称:shinken,代码行数:2,代码来源:test_db_mysql.py


示例10: Ndodb_Mysql_broker

class Ndodb_Mysql_broker(BaseModule):
    def __init__(self, conf):
        BaseModule.__init__(self, conf)
        # Mapping for name of data and transform function
        self.mapping = {
            'program_status' : {
                                'program_start' : {'name' : 'program_start_time', 'transform' : de_unixify},
                                'pid' : {'name' : 'process_id', 'transform' : None},
                                'last_alive' : {'name' : 'status_update_time', 'transform' : de_unixify},
                                'is_running' : {'name' : 'is_currently_running', 'transform' : None}
                                },
            }
        
        self.host = conf.host
        self.user = conf.user
        self.password = conf.password
        self.database = conf.database
        self.character_set = conf.character_set
        self.port = int(getattr(conf, 'port', '3306'))
        
        # Centreon ndo add some fields like long_output that are not in the vanilla ndo
        self.centreon_version = False
        self.synchronise_database_id = int(conf.synchronise_database_id)


    # Called by Broker so we can do init stuff
    # TODO : add conf param to get pass with init
    # Conf from arbiter!
    def init(self):
        logger.log("I connect to NDO database")
        self.db = DBMysql(self.host, self.user, self.password, self.database, 
                          self.character_set, table_prefix='nagios_', port=self.port)
        self.connect_database()

        # Cache for hosts and services
        # The structure is as follow:
        # First the instance id then the host / (host,service desc) to access the wanted data
        self.services_cache_sync = {}
        self.hosts_cache_sync = {}

        # We need to search for centreon_specific fields, like long_output
        query = u"select TABLE_NAME from information_schema.columns where TABLE_SCHEMA='ndo' and TABLE_NAME='nagios_servicestatus' and COLUMN_NAME='long_output';"
        self.db.execute_query(query)
        row = self.db.fetchone()
        if row is None or len(row) < 1:
            self.centreon_version = False
        else:
            self.centreon_version = True
            logger.log("[MySQL/NDO] Using the centreon version")

        # Cache for database id
        # In order not to query the database every time
        self.database_id_cache = {}

        # Mapping service_id in Shinken and in database
        # Because can't acces host_name from a service everytime :(
        self.mapping_service_id = {}

        # Todo list to manage brok
        self.todo = []


    # Get a brok, parse it, and put in in database
    # We call functions like manage_ TYPEOFBROK _brok that return us queries
    def manage_brok(self, b):
        # We need to do some brok mod, so we copy it
        new_b = copy.deepcopy(b)
    
        # If we syncronize, must look for id change
        if self.synchronise_database_id != '0' and 'instance_id' in new_b.data:
            # If we use database sync, we have to synchronise database id
            # so we wait for the instance name
            if 'instance_name' not in new_b.data :
                self.todo.append(new_b)
                return  
                  
            # We convert the id to write properly in the base using the 
            # instance_name to reuse the instance_id in the base.
            else:
                new_b.data['instance_id'] = self.convert_id(new_b.data['instance_id'], new_b.data['instance_name'])
                self.todo.append(new_b)
                for brok in self.todo :
                    # We have to put the good instance ID to all brok waiting
                    # in the list then execute the query
                    brok.data['instance_id'] = new_b.data['instance_id']
                    queries = BaseModule.manage_brok(self, brok)
                    if queries is not None:
                        for q in queries :
                            self.db.execute_query(q)
                # We've finished to manage the todo, so we empty it
                self.todo = []
                return

        # Executed if we don't synchronise or there is no instance_id
        queries = BaseModule.manage_brok(self,new_b)
        
        if queries is not None:
            for q in queries :
                self.db.execute_query(q)
            return
#.........这里部分代码省略.........
开发者ID:bs-github,项目名称:shinken,代码行数:101,代码来源:ndodb_mysql_broker.py


示例11: Glpidb_broker

class Glpidb_broker(BaseModule):
    def __init__(self, modconf):
        BaseModule.__init__(self, modconf)

        self.hosts_cache = {}
        self.services_cache = {}

        # Database configuration
        self.host = getattr(modconf, 'host', '127.0.0.1')
        self.user = getattr(modconf, 'user', 'shinken')
        self.password = getattr(modconf, 'password', 'shinken')
        self.database = getattr(modconf, 'database', 'glpidb')
        self.character_set = getattr(modconf, 'character_set', 'utf8')
        logger.info("[glpidb] using '%s' database on %s (user = %s)", self.database, self.host, self.user)

        # Database tables update configuration
        self.update_availability = bool(getattr(modconf, 'update_availability', '0')=='1')
        self.update_shinken_state = bool(getattr(modconf, 'update_shinken_state', '0')=='1')
        self.update_services_events = bool(getattr(modconf, 'update_services_events', '0')=='1')
        self.update_hosts = bool(getattr(modconf, 'update_hosts', '0')=='1')
        self.update_services = bool(getattr(modconf, 'update_services', '0')=='1')
        self.update_acknowledges = bool(getattr(modconf, 'update_acknowledges', '0')=='1')
        logger.info("[glpidb] updating availability: %s", self.update_availability)
        logger.info("[glpidb] updating Shinken state: %s", self.update_shinken_state)
        logger.info("[glpidb] updating services events: %s", self.update_services_events)
        logger.info("[glpidb] updating hosts states: %s", self.update_hosts)
        logger.info("[glpidb] updating services states: %s", self.update_services)
        logger.info("[glpidb] updating acknowledges states: %s", self.update_acknowledges)

    def init(self):
        from shinken.db_mysql import DBMysql
        logger.info("[glpidb] Creating a mysql backend : %s (%s)" % (self.host, self.database))
        self.db_backend = DBMysql(self.host, self.user, self.password, self.database, self.character_set)

        logger.info("[glpidb] Connecting to database ...")
        self.db_backend.connect_database()
        logger.info("[glpidb] Connected")

    # Get a brok, parse it, and put in in database
    def manage_brok(self, b):
        # Build initial host state cache
        if b.type == 'initial_host_status':
            host_name = b.data['host_name']
            logger.debug("[glpidb] initial host status : %s", host_name)

            try:
                logger.debug("[glpidb] initial host status : %s : %s", host_name, b.data['customs'])
                self.hosts_cache[host_name] = {'hostsid': b.data['customs']['_HOSTID'], 'itemtype': b.data['customs']['_ITEMTYPE'], 'items_id': b.data['customs']['_ITEMSID'] }
            except:
                self.hosts_cache[host_name] = {'items_id': None}
                logger.debug("[glpidb] no custom _HOSTID and/or _ITEMTYPE and/or _ITEMSID for %s", host_name)

            logger.debug("[glpidb] initial host status : %s is %s", host_name, self.hosts_cache[host_name]['items_id'])

        # Build initial service state cache
        if b.type == 'initial_service_status':
            host_name = b.data['host_name']
            service_description = b.data['service_description']
            service_id = host_name+"/"+service_description
            logger.debug("[glpidb] initial service status : %s", service_id)

            if not host_name in self.hosts_cache or self.hosts_cache[host_name]['items_id'] is None:
                logger.debug("[glpidb] initial service status, host is not defined in Glpi : %s.", host_name)
                return

            try:
                logger.debug("[glpidb] initial service status : %s : %s", service_id, b.data['customs'])
                self.services_cache[service_id] = {'itemtype': b.data['customs']['_ITEMTYPE'], 'items_id': b.data['customs']['_ITEMSID'] }
            except:
                self.services_cache[service_id] = {'items_id': None}
                logger.debug("[glpidb] no custom _ITEMTYPE and/or _ITEMSID for %s", service_id)

            logger.debug("[glpidb] initial service status : %s is %s", service_id, self.services_cache[service_id]['items_id'])

        # Manage host check result if host is defined in Glpi DB
        if b.type == 'host_check_result':
            host_name = b.data['host_name']
            logger.debug("[glpidb] host check result: %s: %s", host_name, b.data)

            # Update Shinken state table
            if self.update_shinken_state:
                self.record_shinken_state(host_name, '', b)

            # Update availability
            if self.update_availability:
                self.record_availability(host_name, '', b)

            if host_name in self.hosts_cache and self.hosts_cache[host_name]['items_id'] is not None:
                start = time.time()
                self.record_host_check_result(b)
                logger.debug("[glpidb] host check result: %s, %d seconds", host_name, time.time() - start)

        # Manage service check result if service is defined in Glpi DB
        if b.type == 'service_check_result':
            host_name = b.data['host_name']
            service_description = b.data['service_description']
            service_id = host_name+"/"+service_description
            logger.debug("[glpidb] service check result: %s", service_id)

            # Update Shinken state table
#.........这里部分代码省略.........
开发者ID:shinken-debian-modules,项目名称:shinken-mod-glpidb,代码行数:101,代码来源:module.py



注:本文中的shinken.db_mysql.DBMysql类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python external_command.ExternalCommandManager类代码示例发布时间:2022-05-27
下一篇:
Python basemodule.BaseModule类代码示例发布时间:2022-05-27
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap