假设我有一个名为service.py的python脚本在后台运行作为一种守护进程,我想通过将文本传递给它的标准输入来给它一些信息:
aws elasticbeanstalk update-environment --environment-name "your-env-name" --option-settings "Namespace=aws:autoscaling:launchconfiguration,OptionName=InstanceType,Value=t2.micro"
我的python脚本应该接受其标准输入中的任何内容,将其分配给变量 inp :
> pgrep -f service.py
[pid of process]
> echo -e 'test\n' > /proc/[pid of process]/fd/0
但是,当我执行上述操作时,它只打印stdin流:
import sys
while True:
inp = sys.stdin.readline()
#do something with inp
如果我在剧本中只有这个,那么效果是一样的
> python service.py
test
我做错了什么?
答案 0 :(得分:0)
您可以将命名管道与mkfifo
(https://serverfault.com/questions/443297/write-to-stdin-of-a-running-process-using-pipe)
离开你:
mkfifo yourfifo cat > yourfifo & mypid=$! yourprogram < yourfifo
现在您可以使用
将数据发送到您的程序`echo "Hello World" > yourfifo`
(https://askubuntu.com/questions/449132/why-use-a-named-pipe-instead-of-a-file)
关键是stdin必须被称为 pipe 或命名管道这就是你可以使用mkfifo
的原因,另见How to write data to existing process's STDIN from external process? (python部分)和How to write data to existing process's STDIN from external process?(os部分)