嗨,我正在制作柠檬吧,我想用 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