1.有没有更简单的方法让朋友可以直接取得你所开发的Python程序?有两个方法可以使用。第一个方法是使用安装程序,将完整的Python程序安装,另外一个方法就是使用网页服务器的方式,在此将介绍和使用Python创建一个网页服务器,如此一来,用户就可以通过网页的方法来交换数据,也可以通过远程网络IP的方法,即时和你的程序之间做一个链接的交互。
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
下面这个显示的是文本内容
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") # 返回内容类型为HTML
self.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 都不行
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs
class MyHandler(BaseHTTPRequestHandler):
def do_HEAD(self):
# HTTP HEAD请求处理
self.send_response(405) # 设置HTTP状态码为405,表示方法不被允许
self.send_header("Content-type", "text/html") # 设置响应类型为HTML
self.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 += name
output += b"\" password=\""
output += password
output += 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:
pass
finally:
httpd.server_close()
if __name__ == '__main__':
run()