java - 使用 tcl shell 运行进程的标准输入和输出

标签 java eclipse-plugin tcl

我正在为类似于 GDB 的调试器编写 Eclipse 插件。该调试器是用 C 语言编写的,并使用 TCL 库来处理命令。调试器前端创建并添加使用 TCL Shell 处理的 TCL 扩展。我正在尝试从我的 java 代码运行调试器可执行文件并读取标准输入和输出以与应用程序进行通信。但我的 java 进程在两个管道上都没有得到任何东西。如果我将可执行文件更改为 gdb,我的逻辑就可以正常工作。

我以前从未使用过 Tcl,不确定 Tcl shell 是否与阻止进程进出有关?请提供您的意见或任何可能的指示。

最佳答案

此区域最可能出现的问题与不将输出刷新到其他进程有关,这可能是一个问题。双向。在 Java 方面,在编写完整的消息(通常是整行)后,必须调用 writer 上的 flush() 方法。在 Tcl 端,您可以在写入一行后使用 flush stdout,或者将标准输出 channel 配置为在写入每行后自动刷新:

fconfigure stdout -buffering line

使用二进制协议(protocol),您可以完全禁用缓冲(none 而不是 line),并确保消息在每次写入之前完全组装。

关于java - 使用 tcl shell 运行进程的标准输入和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60105747/

相关文章:

JavaFX Scene Builder 2 效果已禁用

java - Java RMI 服务器/客户端实现出现错误

linux - TCL - 打开一个新的终端,在打开的终端中做一些操作并关闭它

java - Eclipse IDE 颜色主题不起作用

list - 使用 TCL 或 sqlite 从带有符号的列表中获取最高的 x 值(与符号无关)

shell - 如何使命令 "ps"在期望脚本中不显示密码?

java - ThreadPoolExecutor 中的死锁

java - 如何知道mysql表中数据被更新(即数据删除、修改或插入),从而更新java中的json对象

eclipse - 如何使用更新站点将 Eclipse 插件下载为 zip 存档?

eclipse - 当 Node.js 程序从控制台停止时,Eclipse 是否发送终止信号?