2

我想在我通过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

(注释掉等待部分只会使它阻塞阅读)

4

2 回答 2

6

我猜这个问题只是你的lessc不是短命的。它从它的标准输入读取,你永远不会关闭它。

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

于 2013-01-08T22:46:05.117 回答
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
于 2013-01-08T22:53:18.587 回答