Python 列出所有句柄

在 Python 中,句柄(Handle)是指对应到操作系统或者其他系统资源的一个引用或者标识。句柄在编程中非常常见,例如在操作文件、数据库连接、网络通信等场景中都需要使用句柄来进行操作。

在 Python 中,可以通过一些内置的模块或者第三方库来获取并列出所有的句柄。下面将介绍一些常见的句柄以及列出句柄的方法。

文件句柄

在 Python 中,使用 open() 函数打开文件,会返回一个文件对象,该对象就是文件句柄。我们可以通过 dir() 函数来列出文件对象的所有属性和方法。

file = open("example.txt", "r")
print(dir(file))

输出结果为:

['__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'writelines']

我们可以看到文件对象的属性和方法有 close()read()write() 等等。通过这些方法,我们可以对文件进行读写操作。

数据库连接句柄

在 Python 中,连接数据库也需要使用到句柄。常见的数据库连接模块有 pymysqlpsycopg2sqlite3 等。下面以 pymysql 为例,演示如何列出数据库连接对象的属性和方法。

import pymysql

conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', db='test')
print(dir(conn))

输出结果为:

['__class__', '__delattr__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__init_subclass__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_begin', '_get_db', '_get_server_information', '_handler', '_host', '_port', '_protocol', '_read_bytes', '_reraise_with_same_tb', '_server_version', '_sock', '_st', '_utf8_general_ci', '_write_bytes', 'affected_rows', 'autocommit', 'begin', 'charset', 'close', 'commit', 'connect', 'cursor', 'debug', 'encoding', 'errmsg', 'errorhandler', 'host', 'insert_id', 'kill', 'local_infile', 'port', 'protocol', 'query', 'read', 'read_query_result', 'rollback', 'select_db', 'server_status', 'set_charset', 'set_isolation_level', 'set_server_option', 'shutdown', 'ssl', 'sql_mode', 'stat', 'store_result', 'thread_id', 'unread_result', 'use', 'utf8_general_ci']

可以看到连接对象的属性和方法有 close()commit()cursor() 等等。通过这些方法,我们可以对数据库进行操作。

网络连接句柄

在进行网络通信时,也需要使用到句柄。常见的网络连接模块有 socketrequests 等。下面以 requests 为例,演示如何列出网络连接对象的属性和方法。

import requests

response = requests.get("
print(dir(response))

输出结果为:

['__attrs__', '__bool__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__nonzero__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_content', '_content_consumed', '_next', 'apparent_encoding', 'close', 'connection', 'content', 'cookies', 'elapsed', 'encoding', 'headers', 'history', 'is_p