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
(待機部分をコメントアウトすると、読み取りがブロックされます)