我想通过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
(评论等待部分只是让它在阅读时阻止)
答案 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