将文本管道传输到运行python进程的stdin
假设我有一个名为service.py的python脚本在后台作为一种守护进程运行,我想通过将文本管道化到其stdin中为它提供一些信息:将文本管道传输到运行python进程的stdin,python,stdin,Python,Stdin,假设我有一个名为service.py的python脚本在后台作为一种守护进程运行,我想通过将文本管道化到其stdin中为它提供一些信息: > pgrep -f service.py [pid of process] > echo -e 'test\n' > /proc/[pid of process]/fd/0 我的python脚本应该获取其stdin中的任何内容,并将其分配给变量inp: 但当我执行上述操作时,它只打印stdin流: > python service.
> pgrep -f service.py
[pid of process]
> echo -e 'test\n' > /proc/[pid of process]/fd/0
我的python脚本应该获取其stdin中的任何内容,并将其分配给变量inp:
但当我执行上述操作时,它只打印stdin流:
> python service.py
test
如果我真的在我的脚本中有这个,效果是一样的
import sys
inp = sys.stdin.readline() #sys.stdin.readline() never returns
#script never exits
我做错了什么?您可以将命名管道与mkfifo一起使用()
这就给你留下了:
mkfifo yourfifo
cat > yourfifo &
mypid=$!
yourprogram < yourfifo
()
关键是stdin必须被称为pipe或命名pipe这就是为什么您可以使用mkfifo
,另请参见(python部分)和(os部分)您是否尝试调试代码以查看inp
是否实际被分配到某个值?问题可能在的代码中,而循环在其他地方。不,sys.stdin.readline()永远不会返回,我放在后面的所有内容都不会执行。可能是@languitar的重复。你说得对,是的,非常感谢。Windows上的情况如何?Windows上的情况我不太清楚,但它似乎更复杂和有限。在windows(命名)上,管道仅在应用程序容器windows 10版本1709中受支持:管道仅在应用程序容器中受支持;也就是说,从一个UWP进程到另一个UWP进程,这是同一个应用程序的一部分。此外,命名管道必须使用语法“\pipe\LOCAL”作为管道名称。资料来源:另见和
mkfifo yourfifo
cat > yourfifo &
mypid=$!
yourprogram < yourfifo
`echo "Hello World" > yourfifo`