两个Python的小用法httpserver和json.tool

本文介绍如何使用Python快速搭建简易HTTP服务器进行文件传输,适用于Python2与Python3环境。同时,展示了如何利用json.tool模块对JSON字符串进行格式化处理,提升数据可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTPServer
传文件虽然很简单,但是有时很费时,python提供了一个小工具,简单的http服务。也有ftp服务,但是Python没有内置一个直接可以用的FTP服务器,所以需要第三方组件的支持,找到的这个组件叫pyftpdlib,需要安装:pip install pyftpdlib,此处不再详述ftp。
python2的方法是在当前目录执行python -m SimpleHTTPServer,会默认开启8000端口作为http服务端口,浏览器打开http://localhost:8000,即可看到目录内容,亦可下载,实现文件传输。以下是在linux的python2:

[root@node1 py]# ls
1.py  2.py  3.py  server_info
[root@node1 py]# pwd
/root/py
[root@node1 py]# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

在这里插入图片描述

python3的方法是在当前目录执行python -m http.server,以下是在windows下的python3:

C:\Users\Administrator>python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

在这里插入图片描述

json.tool
此工具可将json字符串转换为json对象,能将转换的结果自动对齐和格式化
例如:

[root@node1 ~]# echo '{"name":"weick","age":"22","sex":"male"}' | python -m json.tool
{
    "age": "22",
    "name": "weick",
    "sex": "male"
}

[root@node1 ~]# echo '{"person":{"name":"weick","age":"22","sex":"male"},"class":"one","address":"ShenZhen"}' | python -m json.tool
{
    "address": "ShenZhen",
    "class": "one",
    "person": {
        "age": "22",
        "name": "weick",
        "sex": "male"
    }
}

代码:import socket import json from tool import * # 创建 TCP 服务器套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind(('localhost', 12345)) server_socket.listen(1) print("等待注册...") while True: connection, address = server_socket.accept() try: print(f"设备{address}正在注册") def process_data(self, data, callback): z_lt = len(data) if self.check_head(data): lt = u16_to_int_little(data[2:4]) # 数据长度 if lt <= z_lt: data_z = data[0:lt - 2] # 数据 crc_z = data[lt - 2:lt] # crc校验码 crc = self.crc16_calc(data_z) if crc == crc_z: # 检查CRC是否匹配 print("Received:", data_z.hex(), "CRC OK") self.process_protocol(data[4:lt - 2], callback) else: print(f's{crc_z}--r{crc}') if z_lt > lt: self.process_data(data[lt:z_lt], callback) else: self.buf_data = data else: if self.buf_data: self.process_data(self.buf_data + data, callback) json_data = connection.recv(1234).decode('utf-8') register_request = json.loads(json_data) # register_request = connection.recv(1234).decode('utf-8') print(f"注册成功,账号信息为:{register_request}") # print("Received registration request:", register_request) response = {"status": "success", "message": "Registration successful"} connection.sendall(json.dumps(response).encode('utf-8')) finally: connection.close() 出现报错:Traceback (most recent call last): File "D:\Desktop\my_project\server.py", line 38, in <module> register_request = json.loads(json_data) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\json\__init__.py", line 346, in loads return _default_decoder.decode(s) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Program Files\Python311\Lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 为什么,怎么解决,请用好理解的话解释
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值