夜雨聆风学习资料网

ARTICLE · 1175668

2python之pdf解析bug追踪及lsof命令使用

2python之pdf解析bug追踪及lsof命令使用

写在前面的话

告个段落。昨天,正在搞项目,一个舅转来7000块钱,没有说话,我发了句:感谢舅还钱,如果不是因为买房,我也不会催舅,上次要钱有不对的地方,请舅原谅。舅还是没说话,上个月还了3000,这个月7000,正好还完。又过了几分钟,舅说:你能借舅钱,舅表示感谢,给你带来的麻烦,体谅一下。我好久没给你妈通话了,让我给你妈说说话吧。我赶紧回复说:我还在公司,等晚上回去我给你视频。我又说了一些请求原谅的话,舅始终不再回复。我知道,因为要钱这件事,彻底把舅得罪了,但该面对的总要面对,晚上回去,我给老妈说了这个事,再次强调,因为在天津买房才要的,舅是实在亲戚,不到万不得一不会要的。老妈说:不打了,你不给我一点脸,钱也要回来了,我能说啥,再者来说,你舅家闺女生孩子,你不替我拿钱,我当姑的还怎么说,还怎么和你舅通话。这个事情先这样,告个段落,因为要钱的事,让老妈没面子,让舅为难,归根到底还是我无能导致的,如果我有钱,会不会好一点呢。

[79+200]--------底部有张生活照片

【关键词】python、ragflow、pdf解析、lsof命令

一、pdf解析bug追踪(三级)

描述:现在pdf解析,遇到一个问题,一直追踪不到,接着处理。

开工:

第一步:pid追踪(四级)

20250818周一时间段:18:35-19:00

提问如下:

怎么通过以下进进程信息,看python执行的是哪个程序,python进程信息如下: PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                      1839 admin     20   0 1858120 269080  69312 S   4.3   0.4  43:02.05 python3.11 

方案如下:

要从给定的进程信息中确定 Python 正在执行的程序,可以按照以下步骤操作:

1. 查看进程的完整命令行

使用 ps 命令查看该进程的完整命令行参数:

ps -f -p 1839

或者:

ps aux | grep 1839

这会显示类似如下的输出:

text

UID        PID  PPID  C STIME TTY      STAT   TIME CMDadmin    1839     1  4 Aug15 ?        Sl    43:02 python3.11 /path/to/your_script.py
  • 如果 Python 正在运行脚本,CMD 列会显示 python3.11 your_script.py 或类似内容。

  • 如果 Python 是交互式运行(如 REPL 或 Jupyter),可能只显示 python3.11。

2. 检查进程的工作目录和可执行文件

进入 /proc 目录查看进程信息:

bash

ls -l /proc/1839/exe         # 查看 Python 解释器的路径ls -l /proc/1839/cwd         # 查看进程的工作目录cat /proc/1839/cmdline       # 查看完整的命令行参数(以 \0 分隔)
  • cmdline 文件会显示 Python 启动时的完整命令,如:

    text

    python3.11\0/path/to/your_script.py\0--arg1\0value1\0
3. 检查环境变量(如有必要)

如果需要查看进程的环境变量:

bash

cat /proc/1839/environ | tr '\0' '\n'

某些 Python 程序(如 Flask、Django)可能会通过环境变量(如 FLASK_APP)指定入口文件。

4. 使用 lsof 查看打开的文件

bash

lsof -p 1839

这会列出该进程打开的所有文件,包括:

  • 当前执行的 .py 文件。

  • 导入的模块(在 site-packages 或本地目录中)。

  • 数据文件或套接字。

5. 常见情况分析
  • 直接运行脚本:COMMAND 列会显示 python3.11 your_script.py。

  • 模块方式运行(如 python -m module):会显示 python3.11 -m module_name。

  • 交互式 Shell/REPL:仅显示 python3.11。

  • Web 服务(如 Gunicorn、uWSGI):可能显示 python3.11 app:app 或类似格式。

示例输出解读

根据你提供的进程信息:

text

1839 admin ... python3.11

如果 COMMAND 列仅显示 python3.11,可能是:

  1. 交互式 Python Shell。

  2. 通过 exec 或 fork 动态加载的进程(如某些守护进程)。

  3. 通过 python -c "code" 直接执行的代码片段。

进一步确认

如果上述方法仍无法确定,可以尝试:

bash

sudo grep -a "Traceback" /proc/1839/fd/* 2>/dev/null   # 检查是否有错误日志sudo strace -p 1839 -s 1024                            # 动态跟踪系统调用(谨慎使用)

第二步:总结(四级)

最直接的方法是:

bash

cat /proc/1839/cmdline | tr '\0' ' '

这会显示完整的 Python 启动命令,包括脚本路径或模块名。

二、扫码聊天问题(三级)

描述:现在扫码聊天进行不了,需要处理一下。

开工:

第一步:扫码聊天(四级)

20250819周二时间段:11:19-12:00

这个出问题,是由于欠费导致的,已反馈龙哥,先这样,截图如下:

图2b-1

注:充完值后就好了。接下来,看下缩略图不显示的问题。

第二步:缩略图不显示(四级)

20250819周二时间段:14:35-16:00

不显示截图如下:

图2b-2

注:这个主要是链接地址需要加api,加完api,可以正常访问,如下:

2b-3

注:获取链接的程序如下:

https://api.ai.epet.com/v1/document/list?kb_id=bf5b0a6eff1211ef94e1acde48001122&keywords=&page_size=10&page=1

程序如下:

@manager.route('/list', methods=['GET'])  # noqa: F821@login_requireddef list_docs():    kb_id = request.args.get("kb_id")    if not kb_id:        return get_json_result(            data=False, message='Lack of "KB ID"', code=RetCode.ARGUMENT_ERROR)    tenants = UserTenantService.query(user_id=current_user.id)    for tenant in tenants:        if KnowledgebaseService.query(                tenant_id=tenant.tenant_id, id=kb_id):            break    else:        return get_json_result(            data=False, message='Only owner of knowledgebase authorized for this operation.',            code=RetCode.OPERATING_ERROR)    keywords = request.args.get("keywords", "")    page_number = int(request.args.get("page", 1))    items_per_page = int(request.args.get("page_size", 15))    orderby = request.args.get("orderby", "create_time")    desc = request.args.get("desc", True)    try:        docs, tol = DocumentService.get_by_kb_id(            kb_id, page_number, items_per_page, orderby, desc, keywords)        for doc_item in docs:            if doc_item['thumbnail'] and not doc_item['thumbnail'].startswith(IMG_BASE64_PREFIX):                doc_item['thumbnail'] = f"/v1/document/image/{kb_id}-{doc_item['thumbnail']}"        return get_json_result(data={"total": tol, "docs": docs})    except Exception as e:        return server_error_response(e)

注:对上述代码进行修改,如下:

        host_url_arr = get_host_url_arr(request)        log.info(f"host_url: {host_url_arr}")        for doc_item in docs:            log.info(f"Updated thumbnail URL1: {doc_item['thumbnail']}")            if doc_item['thumbnail'] and not doc_item['thumbnail'].startswith(IMG_BASE64_PREFIX):                doc_item['thumbnail'] = f"/v1/document/image/{kb_id}-{doc_item['thumbnail']}"            if 'pet.bitzero.cn' in host_url_arr['netloc'] or 'ai.epet.com' in host_url_arr['netloc']:                doc_item['thumbnail'] = f"{host_url_arr['scheme']}://api.{host_url_arr['netloc']}{doc_item['thumbnail']}"            log.info(f"Updated thumbnail URL2: {doc_item['thumbnail']}")

注:这个主要是加api,接下来,进行上线测试 。

第三步:测试缩略图(四级)

20250819周二时间段:15:22-16:00

测试了一下,效果还可以,截图如下:

图2b-4

注:这个有一点需要注意的是获取的url前面就带api.,所以不需要额外加的,修改代码如下:

        docs, tol = DocumentService.get_by_kb_id(            kb_id, page_number, items_per_page, orderby, desc, keywords)        host_url = get_host_url(request)        log.info(f"host_url: {host_url}")        for doc_item in docs:            # log.info(f"Updated thumbnail URL1: {doc_item['thumbnail']}")            if doc_item['thumbnail'] and not doc_item['thumbnail'].startswith(IMG_BASE64_PREFIX):                doc_item['thumbnail'] = f"{host_url}/v1/document/image/{kb_id}-{doc_item['thumbnail']}"            if 'pet.bitzero.cn' in host_url or 'ai.epet.com' in host_url:                doc_item['thumbnail'] = f"{host_url}{doc_item['thumbnail']}"            # log.info(f"Updated thumbnail URL2: {doc_item['thumbnail']}")        return get_json_result(data={"total": tol, "docs": docs})

注:这样一来就完美并且优雅了。

三、生活照片

拍摄于‎2025‎年‎11‎月‎4‎日,‏‎9:05:08,老妈在家里做饭时拍的。今天回来,走在路上,我在想,为啥穷人借不到钱呢?向亲戚借不到,向陌生人更借不到。因为人家有,也可能不借,怕后期要钱麻烦,亲戚之间,后期要钱,要考虑很多,承受很大的心理压力。最终的结果很可能是钱要回来了,亲戚也断了,或者是钱压根要不回来,是自己亲戚,不可能去告他。就拿我舅来说,他如果坚持不还钱,我也没办法,我如果起诉,我妈这一关我就过不去。人和人的觉悟是不一样的,就拿舅妈来说,我生两个孩子她都没表示,她女儿生个孩子第一时间通知我,我没拿钱,让我妈很难堪;我如果拿了这个钱,我媳妇指定给我墨迹。通知我这个事,纯纯给我添麻烦啊。

图2c-1

《本文完》

相关学习资料