
python 代码如下
import socket def get_host_ip(): try: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(('8.8.8.8', 80)) ip = s.getsockname()[0] finally: s.close() return ip 1 UN2758 OP |
2 wuwukai007 Nov 16, 2020 via Android 可能是 c 写的 |
3 u823tg Nov 16, 2020 这个不是可能是 c 写的。 |
4 ho121 Nov 16, 2020 via Android 类似 socket 这样的应该是调用的系统函数,具体实现实在系统中,当然没法直接看到源码 |
5 julyclyde Nov 16, 2020 |
6 DoctorCat Nov 16, 220 这种类是 stub,用来告诉你继承关系和方法属性的,真正的实现是在 C 写的扩展库_socket 中,如果不做个 stub,你就不知道这库都包含哪些对象和相关方法属性了。 |
7 lithbitren Nov 17, 2020 一般是去官方文档对应模块页面,然后在页首找到源码,点进去以后就是 5 楼那堆仓库链接了,python 部分应该是可以直接跳转的,可以发先是_socket.socket 引进来的,所以直接在仓库里搜_socket 也是可以定位的。 |
8 UN2758 OP @wuwukai007 #2 @u823tg #3 @ho121 #4 @julyclyde #5 @DoctorCat #6 @lithbitren #7 感谢各位大佬的帮助 https://github.com/python/cpython/blob/master/Lib/socket.py#L51 这个 socket.py 文件为啥不能从 IDE 里直接点击跳转找到呢? |
11 no1xsyzy Nov 17, 2020 你是不是 import 路线上预编译的遮蔽了 .py |
12 UN2758 OP 谢谢各位大佬,我看见了,但是真正的用 C 写的 SocketType 类是怎么加载到 python 里的呢,_socket.py 文件定义的是没实现方法的抽象类啊 |