-6

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 は「送信できますか?」と想定します。コマンドとして...文字列である必要があります...混乱しました

4

2 に答える 2

3

Runtime.exec は、シェルのようにパラメーターを解析しません。文字列の配列をパラメーターとして受け取るバージョンを使用します。

http://m.javaworld.com/jw-12-2000/jw-1229-traps.htmlも参照してください。

于 2013-06-03T06:51:52.963 に答える
-1

ここでのエスケープ'は冗長だと思います。つまり、次のように言うべきです

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text 'can i send?' ");

それ以外の

runtime.exec(pathGammu+" --config "+pathConfig+" TEXT phonenumber -text \'can i send?\' ");

私はあなたのコードを実行しようとはしていませんが、'コマンド ラインの実行時に実際に OS に渡されるため、これが機能する可能性があると思います。それ以外の場合は、おそらくあなたが考えるように、Java ではなく OS によってエスケープされます。

ただしProcessBuilder、外部プロセスを実行するための、より便利で真にクロスプラットフォームの API を提供するものを使用することをお勧めします。

ProcessBuilder pb = new ProcessBuilder();
pb.command(pathGammu, "--config",  pathConfig, "TEXT", "phonenumber", "-text", "can i send?");
Process proc = pb.start();
于 2013-06-03T07:21:36.830 に答える