1.有没有更简单的方法让朋友可以直接取得你所开发的Python程序?有两个方法可以使用。第一个方法是使用安装程序,将完整的Python程序安装,另外一个方法就是使用网页服务器的方式,在此将介绍和使用Python创建一个网页服务器,如此一来,用户就可以通过网页的方法来交换数据,也可以通过远程网络IP的方法,即时和你的程序之间做一个链接的交互。
python">import sys
import socketserver
import http.server
from http.server import SimpleHTTPRequestHandler as RequestHandler
if sys.argv[1:]:port=int(sys.argv[1])
else:port=8888
print('Server listening on port{}'.format(port))
socketserver.TCPServer.allow_reuse_address=True
httpd=socketserver.TCPServer(("127.0.0.1",port),RequestHandler)
try:httpd.serve_forever()
except:print("closing the server")httpd.server_close()raise
下面这个显示的是文本内容
python">import sys
import time
# 如果在Python 3上运行
import socketserver as socketserver
import http.server
from http.server import SimpleHTTPRequestHandler as RequestHandler
class MyHandler(RequestHandler):# 继承原本的HTTP请求处理类def do_GET(self):# 修改和覆盖原始HTTP GET方法self.send_response(200) # HTTP 200网络响应正确self.send_header("Content-type", "text/html") # 返回内容类型为HTMLself.end_headers() # HTML表头处理完毕# 网页内容output = b""output += b"<html><body>Hello</body></html>"self.wfile.write(output) # 将HTML内容写入响应if sys.argv[1:]:# 检查是否有命令行参数port = int(sys.argv[1])
else:port = 8888 # 内定网络端口为8888
print('Server listening on port {}'.format(port)) # 显示本程序的网络位置和端口# 允许地址重用
socketserver.TCPServer.allow_reuse_address = True# 创建HTTP服务器,使用自定义的请求处理器
httpd = socketserver.TCPServer(("127.0.0.1", port), MyHandler)try:httpd.serve_forever() # 持续运行网络服务器
except:print("closing the server.")httpd.server_close() # 关闭网络服务器raise
运行可以,但网页不支持这种操作,post,get 都不行
python">from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qsclass MyHandler(BaseHTTPRequestHandler):def do_HEAD(self):# HTTP HEAD请求处理self.send_response(405) # 设置HTTP状态码为405,表示方法不被允许self.send_header("Content-type", "text/html") # 设置响应类型为HTMLself.end_headers() # 结束头部信息def do_POST(self):# 处理HTTP POST请求varLen = int(self.headers['Content-Length']) # 取得POST数据的长度name = b""password = b""if varLen > 0:# 读取并解析POST数据query_components = parse_qs(self.rfile.read(varLen), keep_blank_values=1)print(query_components) # 打印解析后的数据,用于调试# 取得POST数据中的name和password# 注意:get方法返回的是一个列表,我们取列表的第一个元素name = query_components.post("name", [b""])[0]password = query_components.post("password", [b""])[0]# 调用do_HEAD方法设置HTTP头部self.do_HEAD()# 准备HTML输出内容output = b""output += b"<html><body>Hello, name=\""output += nameoutput += b"\" password=\""output += passwordoutput += b"</body></html>"# 写入响应体self.wfile.write(output)def run(server_class=HTTPServer, handler_class=MyHandler, port=8888):server_address = ('', port)httpd = server_class(server_address, handler_class)print(f'Starting httpd server on port {port}')try:httpd.serve_forever()except KeyboardInterrupt:passfinally:httpd.server_close()if __name__ == '__main__':run()