我正在尝试在 Windows 7 上使用 Python 2.6.5 创建自定义 TCP 堆栈,以在本地端口 80 上提供有效的 http 页面请求。但是,我遇到了似乎 Windows 7 加强了安全性的问题。此代码适用于 Vista。
这是我的示例代码:
import SocketServer
import struct
class MyTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
headerText = """HTTP/1.0 200 OK
Date: Fri, 31 Dec 1999 23:59:59 GMT
Content-Type: text/html
Content-Length: 1354"""
bodyText = "<html><body>some page</body></html>"
self.request.send(headerText + "\n" + bodyText)
if __name__ == "__main__":
HOST, PORT = "localhost", 80
server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
C:\python>python TestServer.py Traceback(最近一次调用):
文件“TestServer.py”,第 19 行,在 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 文件“C:\Python26\lib\SocketServer.py”,第 400 行,在 init self.server_bind() 文件中“C:\Python26\lib\SocketServer.py”,第 411 行,在 server_bind self.socket.bind(self.server_address) 文件“”,第 1 行,在 bind
socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字
我究竟如何让它在 Windows 7 上工作?
[编辑于 5/5/2010 @ 2344 PDT] 这个 答案 解释了错误是由于访问低于 1024 的端口时需要提升/超级用户权限引起的。我将尝试使用更高的端口号来查看是否作品。但是,我还是想知道为什么我的本地admin账号不能访问80端口。
原文由 bitcycle 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 Windows Vista/7 上,使用 UAC,管理员帐户默认以非特权模式运行程序。
程序必须在以管理员身份运行之前提示管理员访问权限,并使用非常熟悉的 UAC 对话框。由于 Python 脚本不能直接执行,因此没有“以管理员身份运行”上下文菜单选项。
可以使用
ctypes.windll.shell32.IsUserAnAdmin()
来检测脚本是否具有管理员访问权限,并且ShellExecuteEx
使用 python.exe 上的“runas”动词,以 sys.argv[0] 作为参数如果需要提示 UAC 对话框。