繁体   English   中英

通过Runtime.exec()执行时命令失败,但在Raspberry Pi(Linux)上手动执行时命令起作用

[英]Command fails when executed through Runtime.exec() but works when executed manually at Raspberry Pi (Linux)

当我尝试通过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", "\\""+Pass+"\\""}); 看起来当手动执行命令时,您必须将密码放在单引号和双引号之间(例如: '"ActualPassword"' ),但是当使用rt.exec()绝对不应该使用简单的引号,而实际上,写下双引号。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM