使用exec或java中的defaultexecutor的IOException
例外情况使用exec或java中的defaultexecutor的IOException,java,command-line,Java,Command Line,例外情况 /usr/sbin/asterisk -rx "dongle sms dongle0 km FROM> some address TO> some address 20 kms. Please respond in 2 minutes, ok, yes, 1 or book. Else ignore" java.io.IOException: Cannot run program "/usr/sbin/asterisk -rx "dongle sms dongle0
/usr/sbin/asterisk -rx "dongle sms dongle0 km FROM> some address TO> some address 20 kms. Please respond in 2 minutes, ok, yes, 1 or book. Else ignore"
java.io.IOException: Cannot run program "/usr/sbin/asterisk -rx "dongle sms dongle0 " (in directory "."): java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:488)
at java.lang.Runtime.exec(Runtime.java:610)
at org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
at org.apache.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:254)
at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:319)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
at Test.main(Test.java:33)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:164)
at java.lang.ProcessImpl.start(ProcessImpl.java:81)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
... 7 more
/usr/sbin/asterisk-rx“加密狗短信加密狗0公里从>某个地址到>某个地址20公里。请在2分钟内回复,确定,是,1或预订。否则忽略”
java.io.IOException:无法运行程序“/usr/sbin/asterisk-rx“加密狗sms加密狗0”(在目录“.”):java.io.IOException:error=2,没有这样的文件或目录
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:488)
位于java.lang.Runtime.exec(Runtime.java:610)
位于org.apache.commons.exec.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
位于org.apache.commons.exec.DefaultExecutor.launch(DefaultExecutor.java:254)
位于org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:319)
位于org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
位于org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
at Test.main(Test.java:33)
原因:java.io.IOException:java.io.IOException:error=2,没有这样的文件或目录
位于java.lang.UNIXProcess(UNIXProcess.java:164)
在java.lang.ProcessImpl.start(ProcessImpl.java:81)
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:470)
…还有7个
代码
publicstaticvoidmain(字符串[]args){
CommandLine CommandLine=newcommandline(“/usr/sbin/asterisk-rx\“加密狗sms加密狗0”);
DefaultExecutor executor=新的DefaultExecutor();
字符串cmd[]=新字符串[8];
cmd[0]=“”;//电话号码
cmd[1]=“”;//与客户的距离
cmd[2]=“距离>”的公里数;
cmd[3]=“某个地址”;
cmd[4]=“至>”;
cmd[5]=“某个地址”;
cmd[6]=“20”;
cmd[7]=“kms。请在2分钟内回复,好的,是的,1或book。否则忽略\”;
试试{
for(int i=0;i
我试过了
命令行命令行=新命令行(“/bin/sh-c echo | sudo/usr/sbin/asterisk-rx \“加密狗sms加密狗0”);我得到了与/bin/sh完全相同的异常
CommandLine CommandLine=new CommandLine(“/bin/dash-c echo | sudo/usr/sbin/asterisk-rx \“加密狗sms加密狗0”);我得到了与/bin/dash完全相同的异常
使用CommandAction和CommandResponse修复了它
ManagerConnection c = null;
CommandAction commandAction;
CommandResponse response = null;
try {
c = new ManagerConnectionFactory("127.0.0.1", 5038, "username", "password")
.createManagerConnection();
c.login();
commandAction = new CommandAction(command);
response = (CommandResponse) c.sendAction(commandAction);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
} catch (AuthenticationFailedException e) {
e.printStackTrace();
}
for (String line : response.getResult()) {
System.out.println(line);
}
manager.conf应具有以下内容
[username]
secret=password
read=system,call,log,verbose,agent,command,user,originate
write=system,call,log,verbose,agent,command,user,originate
permit=127.0.0.1/255.255.255.0
您使用的是apache.commons吗?如果是,请使用addArgument添加-rx\“加密狗sms加密狗0,而不是直接在构造函数中传递它们
[username]
secret=password
read=system,call,log,verbose,agent,command,user,originate
write=system,call,log,verbose,agent,command,user,originate
permit=127.0.0.1/255.255.255.0