提示信息

python创建的文件, result = subprocess.run(['/usr/bin/pdftk', '{}/*.pdf'.format(dir), 'cat', 'output', '{}/all.pdf'.format(dir)], capture_output=True, text=True) 怎么找不到文件

距离感 已关注

在使用 subprocess.run() 尝试合并多个 PDF 文件时,你已经使用了模式匹配(*.pdf)的方式来选择所有 PDF 文件。但是 subprocess.run() 会直接传递参数给命令行程序,而不处理类似 shell 通配符(例如 *)的扩展。这意味着 pdftk 接收到的是字符串 *.pdf,而不是展开后的具体文件列表。

解决方法

  1. 使用 glob 模块进行路径扩展

在 Python 中,你可以使用 glob 模块来帮助你找到符合模式的所有文件,然后将这些文件路径传递给 pdftk。这样可以确保传递的文件列表是经过扩展和验证的。

  1. import subprocess
  2. import glob
  3. import os
  4. # 指定目录路径
  5. directory = '/path/to/directory' # 替换为你的实际目录路径
  6. # 查找目录中的所有 PDF 文件
  7. pdf_files = glob.glob('{}/*.pdf'.format(directory))
  8. # 确保特定文件列表被传递,而不是通配符模式
  9. args = ['/usr/bin/pdftk'] + pdf_files + ['cat', 'output', '{}/all.pdf'.format(directory)]
  10. # 运行命令
  11. result = subprocess.run(args, capture_output=True, text=True)
  12. # 打印命令执行结果
  13. if result.returncode == 0:
  14. print("PDF 文件合并成功")
  15. else:
  16. print("PDF 文件合并失败:", result.stderr)

说明

  • glob.glob(): 用于找到所有符合模式的文件。glob('{}/*.pdf'.format(directory)) 将返回一个包含目录中所有 PDF 文件路径的列表。
  • 构建命令行参数: 将文件列表与其他命令行参数组合成一个完整的列表并传递给 subprocess.run()
  • 确保路径是正确的: directory 必须是你实际用于存放 PDF 文件的目录路径。
  • 错误检查: 检查 result.returncode 以确保 pdftk 命令执行成功,并查看 result.stderr 获取任何错误信息。

这种方法确保了 pdftk 接收到的是实际的文件列表,而不是通配符,进而能够正确处理你的请求。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
距离感 关注 已关注

最近一次登录:2024-11-19 20:36:23   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图