我正在寻找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() + "]")
从其他进程调用该行的执行?
您的代码将无法正常工作。
/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
问题内容: 我有一个通过以下代码启动Java进程的代码(即:执行已编译的Java代码) 通过这一点,我基本上可以处理输出和错误 现在,如何将输入发送到?也就是说,如果进程执行的代码中有一行等待输入,如下所示: 我尝试了这个: 虽然什么都没发生。控制台仍在等待输入。 有什么想法吗? 编辑: 问题已得到回答,如下所示。我正在编辑以显示 错误的代码 (我未能包括btw。Lol)。 在开始之前,我有一个
我对Kinesis是新手。阅读我发现的文档,我可以创建Kinesis流来从生产者那里获得数据。然后使用KCL将从流中读取这些数据以进行进一步的处理。我了解了如何通过引入IRecordProcessor来编写KCL应用程序。
我将多个文本字段绑定到IDE Rapidclipse中的一个实体,该实体使用Vaadin14和JPA/Hibernate。其目的是将按钮点击时的输入数据写入定义为DataSource的引用数据库中。我已经发现这个文档是手动编写的。所以我对此的理解是这样的:首先,我需要创建一个实体的新bean()。那么所有输入数据都应该分配给bean()的属性。文档就这么多了。但是数据是如何插入到数据库中实体的表中
问题内容: 我下面有以下代码示例。你可以在其中输入的命令,即回显结果。但是,先读后。其他输出流不起作用? 为什么会这样或我做错了什么?我的最终目标是创建一个线程计划任务,该任务定期执行对/ bash的命令,因此必须一前一后工作,而不能停止工作。我也一直在经历错误的任何想法? 谢谢。 问题答案: 首先,我建议更换生产线 与线 ProcessBuilder是Java 5中的新增功能,它使运行外部进程更
在我当前的架构中,多个数据流作业在不同阶段被触发,作为ABC框架的一部分,我需要捕获这些作业的作业id作为数据流管道中的审计指标,并在BigQuery中更新它。 如何使用JAVA从管道中获取数据流作业的运行id?有没有我可以使用的现有方法,或者我是否需要在管道中使用google cloud的客户端库?
这是我运行strm.py文件的终端命令 $spark_home/bin/spark-submit--主本地--驱动程序-内存4G--num-executors 2--executor-memory 4G--包org.apache.spark:spark-sql-kafka-0-102.11:2.4.0 org.apache.spark:spark-cassandra-connector2.11:2