subprocess.run确实正常运行pandoc

时间:2017-01-08 19:15:48

标签: python python-3.x subprocess pandoc

如果您使用最少的示例直接运行<div ng-controller="tenant.views.surveys.review as vmModal" class="md-padding dialogdemoBasicUsage" id="popupContainer" ng-cloak=""> <div ng-controller="tenant.views.surveys.review" class="md-padding dialogdemoBasicUsage" id="popupContainer" ng-cloak=""> <md-dialog aria-label="Mango (Fruit)"> <form ng-cloak> {{vmModal.survey}} </form> </md-dialog> </div> 没问题:

pandoc

但是如果你通过subprocess.run调用它,那么它就失败了。这个最小的例子:

$ cat workfile.md 
This is a **test** see ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)
$ pandoc workfile.md 
<p>This is a <strong>test</strong> see <img src="https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png" alt="alt text" /></p>

给我们

import subprocess, os

path = 'workfile.md'
contents = "This is a **test** see ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png)"

with open(path, 'w') as f:

    f.write(contents)
    pbody = subprocess.run(["pandoc", "{}".format(path)], check=True, stdout=subprocess.PIPE)
    print("**** pbody: ", pbody)

1 个答案:

答案 0 :(得分:1)

Python(以及所有其他编程语言)为提高常见操作的性能所做的一件事就是为文件打印等内容维护缓冲区。根据您对文件的写入量而定,并非所有文件都会立即写入,这使得该语言可以减少实际获取磁盘所需的(慢)操作量。如果您在f.flush()之后致电f.write(contents),您应该会看到pandoc获取该文件的实际内容。

还有一层缓冲,值得注意的是 - 您的操作系统可能在内存中有更新版本的文件,但实际上可能没有将其写入磁盘。如果您正在编写服务器,您可能还需要调用os.fsync,这会强制操作系统将其写入磁盘。