什么是通过短期运行流程管理内容并获得输出的最轻松的方法?

时间:2013-01-08 22:22:29

标签: python io piping

我想通过lessc读取/处理的一些东西运行lessc,并且不想乱用文件。 subprocess.check_output和Popen.communicate都被证明是一个非常麻烦的事情本来是一个快速的调整。它们都没有输出任何东西/永远等待。是否有某种无障碍的便利功能来管理缓冲区等等?

示例来源:

from subprocess import Popen
from sys import stderr

s = """
@a: 10px
foo {
    width: @a;
}
"""
print("making")
p = Popen("lessc -", shell=True, stdout=-1, stdin=-1, stderr=stderr)
print("writing")
p.stdin.write(bytes(s, "utf-8"))
print("Waiting")
p.wait()
print("readng")
out = p.stdout.read()
print(out)

输出:

making
writing
Waiting

(评论等待部分只是让它在阅读时阻止)

2 个答案:

答案 0 :(得分:6)

我猜这个问题只是你的lessc并不是短暂的。它是从它的stdin中读取的,你永远不会关闭它。

如果你从stdin读取,在它上面输入一些输入,然后只是等待(从不发出输入结束信号),lessc如何在终端中表现?这就是你的计划正在做的事情。

答案 1 :(得分:2)

以下代码是否适合您?

import subprocess
import sys

s = """
@a: 10px
foo {
    width: @a;
}
"""

p = subprocess.Popen(['lessc', '-'],
    stdin = subprocess.PIPE,
    stdout = subprocess.PIPE,
    stderr = sys.stderr)

out = p.communicate(s)[0]
print out