【问题标题】:How is interacting with a prompt of a third party command line program different from a Windows Command prompt?与第三方命令行程序的提示符交互与 Windows 命令提示符有何不同?
【发布时间】:2013-06-16 21:37:19
【问题描述】:

我最近试图制作一个 Swing GUI 来发送和接收来自第三方命令行 program 的命令。我使用了与命令提示符相同的过程,即 ProcessBuilder 类来执行,然后使用 BufferedReader 从程序中读取响应。我肯定可以再次提及,我至少可以从 Windows 命令提示符读取一些响应(有时我需要使用扫描仪代替)。当我在this 命令行程序上使用相同的,

  1. 没有出现

  2. 它没有响应 BufferedReader 或 Scanner。

    我在网上搜索了一个单调的回复,说对它们执行相同的过程是不一样的,因为它们不是相同的东西。我到现在还没有完成我的项目,但是如果我知道它们之间有什么区别,它们的执行方式,它们不一样,有什么办法可以真的把它们放在一起,我的问题就可以解决了吗?

【问题讨论】:

  • 到目前为止还不是一个问题:“为什么程序不使用标准输入或标准输出”并不是真正有用/可回答的。程序无法启动的原因也有很多...首先要尝试的是在命令提示符下将输入/输出通过管道传输到该程序,以查看它是否确实读取了输入...
  • @AlexeiLevenkov 先生,我没有声望投票赞成您的评论,但谢谢您,我自己也觉得有必要重新提出这个问题。
  • @SukhmeetSingh 乍一看,我会说该程序很可能会打开自己的外壳,尽管“原始”外壳保持沉默且无响应。请描述程序在您从 shell 手动执行时的行为。
  • @SukhmeetSingh 另外,查看代码后,如果您的系统上有 readline,它的行为会有所不同。你呢?
  • @AngeloNeuschitzer 先生,当我从 shell 手动执行它时,它会接管提示,并在对软件进行一些描述后出现自己的提示。提示看起来像jatg>。我的系统上确实有 readLine。

标签: java swing user-interface command-line command-prompt


【解决方案1】:

程序很可能会启动自己的 shell 并且不再与原来的 shell 交互。 (如果程序打开一个新窗口,您会注意到这一点)

或者程序需要一些特定的库才能与 shell 交互(readline 似乎是这里的情况),而这在您的 Java 环境中不存在。

您可以尝试启动bash(或cmd),然后启动该工具。 bashcmdreadline 库。我这里没有准备好窗口,但作为猜测,只需尝试调用您的程序,例如 cmd urjtag.exe 而不是 urjtag.exe 这样您就可以启动 cmd 进程(您可以与之交互)和 cmd启动urjtag.exe,您已经知道它可以与之交互。

无论哪种方式,问题都在于您要调用的程序与 shell 交互的方式,您应该询问程序的作者它是如何工作的以及如何连接到它。

【讨论】:

  • 先生,我认为您是对的,因为当我执行 exe 时,它​​会接管提示,虽然不在其他窗口中,但是是的,它似乎已经开始了自己的过程,然后,但是当然,没有像 dir/p 这样的 Windows 命令可以工作。我很乐意查看bash 看看它是否有帮助。同样,我的声誉不允许我投票支持您的答案。 (PS:readline链接没有页面先生)
  • @SukhmeetSingh 我修复了链接。 bash 是一个 linux/unix 工具。我不确定它是否存在或在 Windows 上可用。
  • @SukhmeetSingh 我添加了有关cmd 而不是bash 的信息。看看吧。
  • 先生,谢谢您,我不知道 bash(因为一直在 windows 上工作),搜索结果也说同样的话。我想我没有仔细阅读您的答案。
  • @SukhmeetSingh 不客气。另外,欢迎使用 StackOverflow。
【解决方案2】:

来自 UrJTAG 文档:

JTAG (IEEE 1149.1) 是一种串行接口,用于测试具有以下特性的设备 集成电路。

UrJTAG 是一个支持 JTAG 感知的软件包 (IEEE 1149.1) 硬件设备(部件)和板通过 JTAG 适配器。

  1. 这不是命令提示符。
  2. 它不能用作通用程序的命令提示符。

因此,正如其他单调的响应已经告诉您的那样,它和 windows 命令提示符不是一回事,即使您似乎认为它们是。如文档中所述,它有一个非常具体的用例。

windows 命令提示符是一个特殊的程序,它调用特定的可执行文件并以特定的方式将命令行参数传递给它们。

java.exe 可执行文件旨在理解这种调用。

由于 UrJTAG 可执行文件不是通用命令提示符,它不执行 windows 命令提示符所做的工作,因此无法运行您想要的 Java 程序。

【讨论】:

  • 据我了解他想要启动特定JTAG库的命令行界面的OP。开始恰好来自 java,他想通过 std-in 和 std-out 与该 CLI 交互。这是一个预期和支持的用例。 (一般不是 JTAG,而是这个库)
  • 合理的假设。我会等到 OP 提供一些明确的信息,如果你说的话得到确认,我会删除我的回复。
  • @RajeshJAdvani 先生,我现在已经不再思考任何一种方式,并且变得公正,如果这有帮助的话。先生,我从来没有说过它是命令提示符,尽管它无疑是一个命令行程序。我同意 java.exe 应该被设计为与 cmd 交互,但让我感到困惑的是,当软件在同一窗口中从 windows 命令提示符接管提示时,为什么我们不能从中读取?
  • 因为它不是通用提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-30
相关资源
最近更新 更多