我正在寻找将数据写入现有流程的方法STDIN
从外部流程,发现类似的问题如何在 Python 中将数据从不同的本地/远程进程流式传输到程序的 STDIN 中? https://stackoverflow.com/questions/3792054/how-do-you-stream-data-into-the-stdin-of-a-program-from-different-local-remote-pr在堆栈溢出中。
在该线程中,@Michael 说我们可以在如下路径中获取现有进程的文件描述符,并允许在 Linux 上将数据写入其中。
/proc/$PID/fd/
因此,我创建了一个下面列出的简单脚本来测试将数据写入脚本的STDIN
(and 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
and TTY
然后,等待有人写它STDIN
.
我启动了这个脚本并收到了下面的消息。
Try commands below
$ echo 'foobar' > /dev/pts/6
$ echo 'foobar' > /proc/3308/fd/0
所以,我执行了命令echo 'foobar' > /dev/pts/6
and echo 'foobar' > /proc/3308/fd/0
从其他终端。执行这两个命令后,会出现消息foobar
在运行测试脚本的终端上显示两次,但仅此而已。线路print("read :: [" + sys.stdin.readline() + "]")
没有被执行。
有没有办法将数据从外部进程写入现有进程的STDIN
(或其他文件描述符),即调用该行的执行print("read :: [" + sys.stdin.readline() + "]")
来自其他进程?