- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有两个 Linux 命令行程序( whiptail 和 dialog )可以向用户显示文本 UI。我想从我的 Java 应用程序中调用其中一个(最好是 Whiptail),以便用户可以从预定义列表中选择一个选项。以下问题对我了解如何从代码中调用 Linux 命令很有帮助:
How to run linux commands in java code?
Want to invoke a linux shell command from Java
这些提供了有关如何运行典型 Linux 命令(例如“ls”)的有用提示,但由于我希望向用户显示文本 UI,我的情况有点复杂(我认为)。
要了解鞭尾的用途和外观,请参阅 this .
最佳答案
从ProcessBuilder
开始。您要发送命令的每个参数都是命令列表中的单独元素,例如...
import java.io.IOException;
import java.io.InputStream;
public class Test {
public static void main(String[] args) throws IOException, InterruptedException {
ProcessBuilder pb = new ProcessBuilder(
"whiptail", "--title", "Check list example", " --checklist",
"Choose user's permissions", "20", "78", "4",
"NET_OUTBOUND", "Allow connections to other hosts", "ON",
"NET_INBOUND", "Allow connections from other hosts", "OFF",
"LOCAL_MOUNT", "Allow mounting of local devices", "OFF",
"REMOTE_MOUNT", "Allow mounting of remote devices", "OFF");
pb.redirectInput(Redirect.INHERIT);
// I tend to use pb.redirectErrorStream(true);
// which sends the error stream to the input stream, but
// then you'd need to still consume it to get the result
Process p = pb.start();
InputStreamConsumer errorConsumer = new InputStreamConsumer(p.getErrorStream());
Scanner input = new Scanner(System.in);
String option = input.nextLine();
p.getOutputStream().write(option.getBytes());
p.getOutputStream().flush();
int exitCode = p.waitFor();
System.out.println(exitCode);
errorConsumer.join();
System.out.println(errorConsumer.getContent());
}
public static class InputStreamConsumer extends Thread {
private InputStream is;
private StringBuilder content;
public InputStreamConsumer(InputStream is) {
this.is = is;
content = new StringBuilder(128);
}
public String getContent() {
return content.toString();
}
@Override
public void run() {
try {
int value = -1;
while ((value = is.read()) != -1) {
content.append((char)value);
}
} catch (IOException exp) {
exp.printStackTrace();
}
}
}
}
这是非常基本的,它只是执行命令,将其输出消耗到StringBuilder
中(稍后检索),等待命令存在并显示基本结果。
由于我无权访问 whiptail
,因此无法测试代码,但如果该命令在操作系统的默认搜索路径中可用,则它应该可以工作,否则您需要提供命令的路径作为命令列表中第一个元素的一部分
关于java - 如何在 Java 应用程序中调用文本 UI(whiptail 或对话框)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47683605/
我想使用“whiptail”包在屏幕上同时生成菜单框和输入框。这可能吗?或者也许有对话?我找不到这方面的任何例子。 我想要这样的东西:菜单项 1菜单项 2菜单项 3 如果以上都不是,请输入您自己的:输
这是根据文件变量中的文件内容打开一个 whiptail 消息框的代码。该文件有很多行。 $(whiptail --title "Opening file" --yesno "$(cat $file)"
如何使用输入文件 file.data 配置 whiptail 对话框? whiptail --menu "foo" 0 0 0 2>/tmp/out file.data的内容: "01" "Item
我正在尝试使用“whiptail”向用户显示进度,同时删除一些 RPM。使用 { echo 25 yum remove package_name echo 50 yum remove pack
为什么这段代码在 Bash 中不起作用? whiptail --infobox "My Text" 0 0 手册指出: whiptail --infobox text height width 怎么了
我正在尝试切换到一个目录并在我的 whiptail 对话框屏幕中运行其他命令,但是在克隆我的 git 存储库之后,我的脚本似乎在尝试切换到该目录时快死了: STATUS=0 touch log.txt
我想在 whiptail 界面中显示一个实时变量的值。我像那样增加变量 = #!/bin/bash i=1 while test $i -ne 51 do echo "$i" i=$(
我找到了一个很棒的小程序,可以让我将用户友好的 GUI 添加到我的 Bash 脚本中; 鞭尾 然而 whiptail man page不是那么有帮助,也没有提供任何示例。在进行了一些谷歌搜索后,我了解
我使用 whiptail 创建了一个 bash 程序,为用户提供图形界面来设置他们的系统。由于某种原因,我的脚本没有运行我的任何 bash 命令,相反它似乎循环输出到我的 log.txt 文件,但没有
我想用whiptail password询问你的sudo password然后用它来运行sudo script.sh这样可以吗? 我已经尝试过使用 whiptail 输入密码的 sudo 命令 sud
我正在尝试使用 Whiptail 制作一个进度条,它可以正确跟踪 wget ping 的进度。 我的目标是创建一个脚本,通过对 google.com 执行 ping 命令来测试您的互联网,当发生这种情
我正在创建一个在我的树莓派上运行的 shell 脚本。在此过程中,我试图简化一些重复的代码,并且我想为 whiptail 函数制作一个包装器,如下所示。 function yesno() { an
我想通过将一些 PYTHON 代码的输出传递给“whiptail”,在 headless Linux 服务器上使用 TUI(文本用户界面)。不幸的是,鞭尾鱼似乎什么也没发生。当我通过管道从常规 she
我试图通过鞭尾的信息框来表示日志文件。唯一的挫折是我不想向下滚动数百行日志。有没有办法让滚动条自动走到框的末尾? 感谢您的帮助。 最佳答案 鞭尾似乎没有办法做到这一点。我也很高兴知道是否有人能成功。不
我正在使用 whiptail 创建一个虚拟机配置脚本,我希望它在用户登录后自动启动。问题是,我不希望用户成为 root,但是因为用户会需要能够更改主机名、IP 地址、添加目录等内容。他们需要 sudo
有两个 Linux 命令行程序( whiptail 和 dialog )可以向用户显示文本 UI。我想从我的 Java 应用程序中调用其中一个(最好是 Whiptail),以便用户可以从预定义列表中选
有人可以解释为什么下面的代码不起作用吗?我快要发疯了。 #!/bin/bash TEST="M1 \"1-wire Interface\" ON" echo $TEST RESULT=$(dialog
因此,我必须设置多个服务器,每个服务器都需要 mysql-server。我决定编写一个 shell 脚本来输入 whiptail,这需要用户输入密码。我写了 bash 脚本,但是当它到达 whipta
我是一名优秀的程序员,十分优秀!