Python Uudecode 调用损坏
Posted
技术标签:
【中文标题】Python Uudecode 调用损坏【英文标题】:Python Uudecode Call Corruption 【发布时间】:2015-09-24 01:24:09 【问题描述】:我正在从 SEC 文件中提取 PDF。他们通常是这样来的:
SEC Filing Example
无论出于何种原因,当我将原始 PDF 保存为 .text 文件,然后尝试运行时
uudecode -o output_file.pdf input_file.txt
从 python subprocess.call()
函数或任何其他允许从命令行执行命令的 python 函数,生成的 PDF 文件已损坏。如果我直接从命令行运行相同的命令,则不会损坏。
仔细查看从 python 脚本输出的 PDF 文件时,看起来文件过早结束。从 python 执行命令行命令时是否存在某种输出限制?
谢谢!
【问题讨论】:
如果从命令行运行:python -muu -d input_file.txt output_file.pdf
会发生什么?
@J.F.Sebastian 当我在命令行中运行它时,它起作用了。但只要我把它像这样放入我的代码中:subprocess.call([ "python", "-muu", "-d", input_file.txt, output_file.pdf])
我也有同样的问题
不要将它作为 Python 脚本中的子进程运行,您可以将其导入:import uu; uu.decode('input_file.txt', 'output_file.pdf')
(注意:文件名周围的引号不是可选的;它们在 Python 中创建一个字符串对象) .或者(更好)传递打开的二进制文件对象,例如,使用input_file = open('input_file.txt', 'rb'); output_file = open('output_file.pdf', 'wb')
创建的
【参考方案1】:
这个脚本对我在 Python 3.4.1 和 uudecode 4.15.2 的 Fedora 21 x86_64 上运行很好:
import subprocess
subprocess.call("uudecode -o output_file.pdf input_file.txt", shell=True)
使用链接的 SEC 文件(长度:173,141 B;sha1:e4f7fa2cbb3422411c2f2968d954d6bb9808b884
),解码的 PDF(长度:124,557 B;sha1:1676320e1d9923e14d19451c16688198bc93ca0d
)在查看时显示正确。
您的环境中可能存在其他问题导致问题。您可能想为您的问题添加更多详细信息。
从 python 执行命令行命令时是否存在某种输出限制?
如果“输出限制”是指uudecode
写入的文件的大小,则不是。使用subprocess
模块时唯一需要担心的“输出限制”类型是在创建子进程时传递stdout=PIPE
或stderr=PIPE
。如果子进程向这些流中的任何一个写入足够的数据,并且您的脚本没有定期耗尽它们,则子进程将阻塞(请参阅subprocess
模块文档)。在我的测试中,uudecode
没有向stdout
或stderr
写任何内容。
【讨论】:
感谢您的回复。我正在使用 Python 2.7.3、Ubuntu 精确(12.04.5 LTS)、uudecode 4.11。我可能会尝试更新到 uudecode 4.15,看看这是否对我的问题有帮助。编辑:我不认为 python 2.7 可以更新到 uudecode 4.1 你能在你的脚本中检查subprocess.call()
的返回值吗?以上是关于Python Uudecode 调用损坏的主要内容,如果未能解决你的问题,请参考以下文章
bash 脚本如何在不使用 uudecode 的情况下写出二进制文件?