gpt4 book ai didi

java - 通过 Runtime.exec() 执行时命令失败,但在 Raspberry Pi (Linux) 上手动执行时命令有效

转载 作者:太空宇宙 更新时间:2023-11-04 12:42:13 32 4
gpt4 key购买 nike

当我尝试通过 Java 中的 Runtime.exec() 执行一组命令时,其中一些命令不起作用。尽管如此,当我在终端中手动执行相同的命令时,它们都可以正常工作。我确保复制完全相同的命令,它们仅在手动执行时有效。是什么导致了这个问题?

这是我的代码:

rt = Runtime.getRuntime();
rt.exec("sudo wpa_cli -i " + ifName + " remove_network 0"); //Always removes network 0, in case it already exists
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " add_network 0");
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " set_network 0 ssid '\"" + SSID + "\"'");//This command only works when executed manually
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " set_network 0 psk '\"" + Pass + "\"'");//This command only works when executed manually
Thread.sleep(250);
rt.exec("sudo wpa_cli -i " + ifName + " select_network 0");

我输入 SSID 和密码的命令是导致问题的命令。 ifName 是我正在使用的 NIC 的名称。

请注意,我添加了几个 Thread.sleep(),因为我不确定在调用下一个命令之前这些命令是否有时间完成执行(因为这是配置网络并连接到它,我真的不知道)。也许它们完全没用,但我添加了它们以防万一。

编辑:我知道这与引用重复无关,因为我已经尝试删除引号但代码仍然无效。我一直从控制台收到相同的 FAIL 消息。

最佳答案

感谢@user140547 的帮助!

它最终通过执行 rt.exec(new String[] {"sudo", "wpa_cli", "-i", ifName, "set_network", "0", "psk", "\""+通过+"\""});。看起来手动执行命令时,您必须将密码放在单引号和双引号之间,(例如:'"ActualPassword"')但是当使用 rt.exec() 绝对不应该使用单引号,实际上,你应该写下双引号。

所以我想这个问题毕竟与引用重复无关,因为我最终不得不写下引用。我仍然不确定为什么会这样。

关于java - 通过 Runtime.exec() 执行时命令失败,但在 Raspberry Pi (Linux) 上手动执行时命令有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821986/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com