我试图在项目中使用命名管道。我有两个接线端子,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
答案 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
读取命令,但我无法在测试中使用它。
但是我有点不清楚你到底想要在这里做些什么。我怀疑可能有另一种解决方案更适合您所遇到的问题。