将文本传递给运行python进程的stdin

时间:2017-02-07 15:35:10

标签: python stdin

假设我有一个名为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            

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以将命名管道mkfifohttps://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部分)