【发布时间】:2019-06-25 00:16:26
【问题描述】:
为什么通过 subprocess.call 调用可执行文件会给 subprocess.run 带来不同的结果?
调用方法的输出很完美——所有新行都被删除了,文档的格式完全正确,'-'字符、项目符号和表格处理得很好。
但是,使用 run 方法运行完全相同的函数并从 stdout 读取输出会完全抛出输出。充满了 '\n'、'Â\xad'、'\x97'、'\x8f' 字符,并且到处都是空格。
这是我正在使用的代码:
Subprocess.CALL
result=subprocess.call(['/path_to_pdftotext','-layout','/path_to_file.pdf','-'])
Subprocess.RUN
result=subprocess.run(['/path_to_pdftotext','-layout','/path_to_file.pdf','-'],stdout=PIPE, stderr=PIPE, universal_newlines=True, encoding='utf-8')
我不明白为什么 run 方法不以相同的方式解析和显示文件。我会使用 call 但是我需要将 pdftotext 转换的结果保存到一个变量中(在运行的情况下:var = result.stdout)。
我可以通过并识别它在运行中没有拾取的所有 unicode 并将其剥离,但我认为运行方法必须更改一些编码/解码设置。
编辑
阅读了一个措辞相似的问题 - 我相信这在范围上有所不同,因为我想了解为什么输出不同。
【问题讨论】:
-
为什么你在使用 run 的时候将 universal_newlines 设置为 True ?您通过调用将其设置为默认值(也称为无),这可能解释了输出差异
-
@Viper - 我应该提到我已经尝试添加这些选项以查看这是否保留了格式。我只使用 stdout=PIPE 运行它,但唯一真正的区别是它在启用了 universal_newlines=True 的情况下清除了更多的 unicode 字符。所以更好,但仍然没有提供与 call 相同的输出。
标签: python subprocess