使用命名管道时,终端提示消失

时间:2015-07-14 18:39:31

标签: named-pipes prompt csh mkfifo

我试图在项目中使用命名管道。我有两个接线端子,A端和B端。

在终端A中,我发出了这个命令:

mkfifo myFifo && tail -f myFifo | csh -s

似乎标准输出被重定向到其他地方,因为我的提示消失了,一些命令没有反映在终端A中。

例如,如果在终端B中我通过发出echo "python" > myFifo开始python会话,然后echo "print 'Hello, World'" > myFifo,我就不会在终端A看到Hello,World。

但是,如果我在终端B中发出echo ls > myFifo,我会在终端A中看到来自ls的正确输出。

有没有人知道为什么有时会出现输出,有时它不会?

我在CentOS 6.6上运行

谢谢, erip

1 个答案:

答案 0 :(得分:0)

您使用csh从FIFO读取,如果您在csh中启动交互式Python shell,那么它将无法从FIFO中读取,因为它正忙于运行{ {1}}。

Python没有以某种方式在FIFO上自动执行REPL。它甚至应该知道关于FIFO的?它不知道它。

或许,您可以告诉Python从FIFO中读取命令,例如:

python

然后:

>>> import os, sys, time
>>> fifo = open(os.open('myFifo',  os.O_NONBLOCK), 'r')

会给你:

$ echo 'print(42+5)' > ! myFifo  

也许还有一种方法可以告诉Python通过覆盖>>> eval(fifo.read()) 47 myFifo读取命令,但我无法在测试中使用它。

但是我有点不清楚你到底想要在这里做些什么。我怀疑可能有另一种解决方案更适合您所遇到的问题。