如何通过管道将 python 脚本传送到柠檬吧?

如何通过管道将 python 脚本传送到柠檬吧?

嗨,我正在制作柠檬吧,我想用 python、go、c 或 shell 脚本以外的其他语言制作它,因为我希望程序管理循环以及其中进行的线程。

我发现我可以在我调用的地方制作一个脚本,例如。循环中每次迭代中的 python 脚本,例如

bar.sh

while true
do
    python script.py
    sleep 1
done

然后是script.py

print('%{c}hello')

然后我像这样运行它

sh bar.sh | lemonbar

这行得通,我hello在酒吧中间得到了一个。但我想做这样的事情

bar.py

while True:
    print('%{c}hello')

并将其通过管道输送到柠檬吧

python bar.py | lemonbar

这不行。我得到了一个酒吧,但上面什么也没有。

我的猜测是,与我的 shell 使用的文件描述符相比,这与 python 打印函数使用的文件描述符有关zsh

编辑:我也尝试过

import sys, time

fd = sys.stdout

while True:
    fd.write('hej\n')
    time.sleep(1)

那并没有改变任何事情。

感谢您阅读我的问题。我希望你能帮忙:)

答案1

实际上我只是通过阅读某人的实现方式才知道如何做到这一点柠檬吧模块

import time
from subprocess import Popen, PIPE

fd = Popen('lemonbar', stdin=PIPE, stdout=PIPE, encoding='UTF-8')

while True:
    time.sleep(1)
    fd.stdin.write('%{c}hello')
    fd.stdin.flush()
    print(fd.stdout.read())

诀窍是在写入文件描述符后刷新它

所以我也可以这样做

bar.py

import time 
import sys
fd = sys.stdout
while True:
    fd.write("%{c}hello")
    fd.flush()
    time.sleep(1)

然后像平常一样运行

python bar.py | lemonbar

相关内容