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
,而不是展开后的具体文件列表。
解决方法
- 使用
glob
模块进行路径扩展
在 Python 中,你可以使用 glob
模块来帮助你找到符合模式的所有文件,然后将这些文件路径传递给 pdftk
。这样可以确保传递的文件列表是经过扩展和验证的。
import subprocess
import glob
import os
# 指定目录路径
directory = '/path/to/directory' # 替换为你的实际目录路径
# 查找目录中的所有 PDF 文件
pdf_files = glob.glob('{}/*.pdf'.format(directory))
# 确保特定文件列表被传递,而不是通配符模式
args = ['/usr/bin/pdftk'] + pdf_files + ['cat', 'output', '{}/all.pdf'.format(directory)]
# 运行命令
result = subprocess.run(args, capture_output=True, text=True)
# 打印命令执行结果
if result.returncode == 0:
print("PDF 文件合并成功")
else:
print("PDF 文件合并失败:", result.stderr)
说明
glob.glob()
: 用于找到所有符合模式的文件。glob('{}/*.pdf'.format(directory))
将返回一个包含目录中所有 PDF 文件路径的列表。- 构建命令行参数: 将文件列表与其他命令行参数组合成一个完整的列表并传递给
subprocess.run()
。 - 确保路径是正确的:
directory
必须是你实际用于存放 PDF 文件的目录路径。 - 错误检查: 检查
result.returncode
以确保pdftk
命令执行成功,并查看result.stderr
获取任何错误信息。
这种方法确保了 pdftk
接收到的是实际的文件列表,而不是通配符,进而能够正确处理你的请求。