如何从外部进程将数据写入现有进程的 STDIN?
- 2024-10-30 08:36:00
- admin 原创
- 48
问题描述:
我正在寻找从外部进程将数据写入现有进程的方法,并在 stackoverlow 中STDIN
发现了类似的问题 如何使用 Python 将数据从不同的本地/远程进程流式传输到程序的 STDIN?
在该线程中,@Michael 说我们可以像下面这样获取路径中现有进程的文件描述符,并允许在 Linux 上向其中写入数据。
/proc/$PID/fd/
因此,我创建了下面列出的简单脚本来测试从外部进程将数据写入脚本STDIN
(和TTY
)。
#!/usr/bin/env python
import os, sys
def get_ttyname():
for f in sys.stdin, sys.stdout, sys.stderr:
if f.isatty():
return os.ttyname(f.fileno())
return None
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > {0}".format(get_ttyname()))
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
print("read :: [" + sys.stdin.readline() + "]")
该测试脚本显示STDIN
和的路径TTY
,然后等待一个人写入它的STDIN
。
我启动了这个脚本并收到以下消息。
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
因此,我从另一个终端执行了该命令echo 'foobar' > /dev/pts/6
。echo 'foobar' > /proc/3308/fd/0
执行完这两个命令后,foobar
测试脚本正在运行的终端上会显示两次消息,但仅此而已。该行print("read :: [" + sys.stdin.readline() + "]")
未执行。
有没有办法将数据从外部进程写入现有进程STDIN
(或其他文件描述符),即print("read :: [" + sys.stdin.readline() + "]")
从其他进程调用该行的执行?
解决方案 1:
您的代码将不起作用。
/proc/pid/fd/0
是该文件的链接/dev/pts/6
。
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/pid/fd/0
由于这两个命令都写入终端。该输入到达终端而不是进程。
如果 stdin 最初是管道,它将起作用。
例如test.py
:
#!/usr/bin/python
import os, sys
if __name__ == "__main__":
print("Try commands below")
print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid()))
while True:
print("read :: [" + sys.stdin.readline() + "]")
pass
运行如下:
$ (while [ 1 ]; do sleep 1; done) | python test.py
现在从另一个终端写入一些内容/proc/pid/fd/0
,它将会出现test.py
解决方案 2:
我想在这里留下一个我认为有用的例子。这是对上面的 while true 技巧的轻微修改,在我的计算机上偶尔会失败。
# pipe cat to your long running process
( cat ) | ./your_server &
server_pid=$!
# send an echo to your cat process that will close cat and in my hypothetical case the server too
echo "quit
" > "/proc/$server_pid/fd/0"
它对我很有帮助,因为由于特殊原因我无法使用mkfifo
,它非常适合这种情况。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件