Lor*_*oh. 10 shell terminal pipe io-redirection stdin
我想要做的是在终端窗口中运行 python 并从命名管道重定向它的标准输入。然后我在另一个终端写入命名管道并在 python 上执行该命令。
1号航站楼:
mkfifo p1
python < p1
Run Code Online (Sandbox Code Playgroud)
2 号航站楼:
echo -n "print \"Hello World\"" > p1
Run Code Online (Sandbox Code Playgroud)
会发生什么 - python 打印Hello World
并退出。我想要做的是保持 python 运行以执行下一个命令。我如何在 shell 中执行此操作?
Sté*_*las 10
你需要
python -i
所以:
python -i < p1
Run Code Online (Sandbox Code Playgroud)
和其他地方:
exec 3> p1
echo '1j*1j' >&3
...
# and when done, close that file descriptor so python sees the EOF:
exec 3>&-
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用tail -f
在echo
写入后保持 fifo 打开。
tail -n1 -f p1 | python
Run Code Online (Sandbox Code Playgroud)
为什么这有效
python
正在阅读p1
。当它到达文件末尾时,它停止读取。这是文件读取的正常行为,即使文件是命名管道。tail
使用-f
(follow) 标志将在到达文件末尾后继续读取文件。