Python脚本中如何借助lynx将HTML源码转换为人类可读格式?
错误原因
你遇到的OSError: [Errno 7] Argument list too long: 'echo'报错,本质是超长的HTML字符串被作为echo命令的参数传递,超过了操作系统限制的命令行参数最大长度(ARG_MAX),所以触发了系统级错误。
正确实现方案
不需要通过echo中转传递HTML内容,直接调用subprocess.run的input参数,把内存中的HTML字符串直接注入到lynx的标准输入即可,完全绕过命令行参数长度限制:
import subprocess # 你的html变量 html = "<!doctype html>\n<html><head><title>My title</title></head>LOTS OF CHARS HERE</html>" # 直接调用lynx,将html作为标准输入传入 res = subprocess.run( ["lynx", "-stdin", "-dump"], capture_output=True, text=True, input=html ) # 打印格式化后的可读内容 print(res.stdout)
方案说明
- 该写法没有多余的进程开销,不需要额外创建
echo进程或者管道中转 - 输入内容长度不受系统命令行参数上限限制,哪怕是几MB的HTML源码也可以正常处理
- 如果遇到编码异常,可以给
subprocess.run增加encoding参数指定网页对应的编码即可
内容的提问来源于stack exchange,提问作者Georg
相关产品推荐
相关产品推荐

