我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,它适用于run-and-done命令.例如,这将在工作目录中运行带有参数"myArg"的"myProgram":
List<String> commandLine = new ArrayList<String>();
commandLine.add("myProgram");
commandLine.add("myArg");
ProcessBuilder builder = new ProcessBuilder(commandLine);
builder.redirectErrorStream(true);
Process process = builder.start();
Run Code Online (Sandbox Code Playgroud)
但是,假设我想运行脚本或程序或具有交互式输入的东西(它在启动后提示我输入更多内容).我可以使用类似于上面的代码在Java中执行此操作,还是需要不同的方法?或者是否有一些图书馆可以帮我解决这个问题?
通过 ProcessBuilder (特别是“GetMac /s”)运行命令行命令时,如果它抛出错误或正常返回,我可以读取错误或它返回的 MAC 地址,但如果它提示用户输入(网络上的某些电脑)使用 getmac 时需要密码)该进程将挂起等待密码。
以下是该命令从命令行运行时执行的操作:

这是我用于该过程的代码:
package testing;
import java.io.IOException;
class test1 {
public static void main(String[] args){
String hostName = "testpc";
ProcessBuilder builder = new ProcessBuilder("getmac", "/s", hostName, "/nh");
builder.inheritIO();
try {
Process proc = builder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要 mac 的原因是为了唤醒 LAN 程序,并希望在检测到任何新电脑的 mac 地址时自动获取它们,这样用户就不必手动输入它。因此,如果您知道获取远程电脑的 MAC 的更好方法,请务必告诉我,我将使用它。
我意识到 java 可能不是最好的语言,但它是我目前唯一知道的语言,这只是我在工作中休息时的一个有趣的小项目。
**编辑:如果它需要密码,我只想忽略该电脑并终止进程并继续到下一台电脑