0

基本的に、Java プログラムを使用して Python スクリプトを実行しようとしています。

これは私の Java コードのスニペットです。

String cmd = "python /home/k/Desktop/cc.py";        
InputStream is = Runtime.getRuntime().exec(cmd).getInputStream(); 
InputStreamReader isr = new InputStreamReader(is);
BufferedReader buff = new BufferedReader (isr);
String line;
while((line = buff.readLine()) != null)
System.out.println(line);

このコードを実行すると、必要な出力が出力されます。しかし、次の行を追加して sys.argv 引数を受け取るように cc.py ファイルを変更しました。 print sys.argv[1]

ここで、Java String cmd を次のように変更すると:

String[] cmd = new String[] {"python /home/k/Desktop/cc.py", "3"};

エラーが発生します:

Exception in thread "main" java.io.IOException: Cannot run program "python /home/k/Desktop/cc.py": error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1041)
at java.lang.Runtime.exec(Runtime.java:617)
at java.lang.Runtime.exec(Runtime.java:485)
at test.main(test.java:36)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:135)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1022)
... 3 more

私にとって、これが配列文字列に対して機能しないのはなぜですか? いくつかのグーグルを行った後、これは他の人にも機能します。

4

1 に答える 1

4

変更してみる

String[] cmd = new String[] {"python /home/k/Desktop/cc.py", "3"};

String[] cmd = new String[] {"python", "/home/k/Desktop/cc.py", "3"};

使用する最初の形式 ( exec(String command)) は、指定された文字列を内部的にトークン化します。この形式を使用する場合は、exec(String[] cmdarray)実行するプログラムを配列の最初の要素として渡し、パラメーターを他の要素として渡す必要があります。その場合、トークン化は適用されません。

于 2013-10-01T17:06:23.690 に答える