当我使用gammu和java创建smsGateway时,我遇到了这样的语法问题:
try {
Process process = runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException ex) {
System.out.println("Error : " + ex.getMessage());
}
当我运行该语法时,我有来自gammu的响应“什么是参数:我发送?”...... gammu假设“我可以发送吗?”作为命令......它应该是一个字符串...我很困惑
答案 0 :(得分:3)
Runtime.exec不解析shell之类的参数。使用带有字符串数组的版本作为参数。
答案 1 :(得分:-1)
我想这里'
的逃避是多余的,即你应该说
runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text 'can i send?' ");
而不是
runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");
虽然我没有尝试运行你的代码,但我认为这有机会运行,因为现在'
在运行命令行时确实传递给了操作系统。否则它会被操作系统转义,而不是像您想象的那样通过Java转义。
但是我建议您使用ProcessBuilder
来提供更方便,更真实的跨平台API来运行外部流程:
ProcessBuilder pb = new ProcessBuilder();
pb.command(pathGammu, "--config", pathConfig, "TEXT", "phonenumber", "-text", "can i send?");
Process proc = pb.start();