[python]指定 Socket connect 方法的超时时间

通过设置 socket.settimeout 来实现超时功能:

import select
import socket

HOST = '127.0.0.1'
PORT = 8000
timeout = 60 * 1   # 1 分钟

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置连接超时
s.settimeout(10)
s.connect((HOST, PORT))
# 恢复默认超时设置
s.settimeout(None)
s.connect((HOST, PORT))
s.sendall('msg')

参考

more ...

[python]指定 Socket recv 方法的超时时间

使用 select 来变相实现超时功能:

import select
import socket

HOST = '127.0.0.1'
PORT = 8000
timeout = 60 * 1   # 1 分钟

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('msg')
# 设置 recv 超时时间
s.setblocking(0)
ready = select.select([s], [], [], timeout)
if ready[0]:
    # 接收结果
    data = s ...
more ...

[python] 修复读取 utf-8 BOM 编码的配置文件时出现的 ConfigParser.MissingSectionHeaderError: File contains no section headers 错误

当使用 ConfigParser 读取 utf-8 BOM 编码的配置文件时,会出现如下类似错误:

ConfigParser.MissingSectionHeaderError: File contains no section headers.
File: settings.ini, line: 1
'\xef\xbb\xbf[General]\n'

解决办法就是先将文件内容读出来,然后转码,然后再读取转码后的配置信息:

import ConfigParser
from StringIO import StringIO

conf = ConfigParser.RawConfigParser()
with open('settings.ini', 'rb') as f:
    content = f.read().decode('utf-8-sig').encode('utf8 ...
more ...