Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文本管道传输到运行python进程的stdin_Python_Stdin - Fatal编程技术网

将文本管道传输到运行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.

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