2010-12-31 7 views
3

PYTHONHOME環境変数を設定する必要があるAndroidでサブプロセスを実行しようとしています(this questionを参照)。 java.lang.UnsupportedOperationExceptionを回避する方法:環境を変更できませんか?

ProcessBuilder pbuilder = new ProcessBuilder("python/bin/python", "test.py"); 
    pbuilder.directory(getFilesDir()); 
    Map<String, String> env = pbuilder.environment(); 
    env.put("PYTHONHOME", "python"); 

    Process process = pbuilder.start(); 

が、私はこの例外を取得:私は、次のコードでそうしようとした

E/AndroidRuntime(25857): FATAL EXCEPTION: main 
E/AndroidRuntime(25857): java.lang.UnsupportedOperationException: Can't modify environment 
E/AndroidRuntime(25857): at java.lang.SystemEnvironment.put(System.java:740) 
E/AndroidRuntime(25857): at java.lang.SystemEnvironment.put(System.java:688) 
E/AndroidRuntime(25857): at my code 
E/AndroidRuntime(25857): at android.view.View.performClick(View.java:2408) 
E/AndroidRuntime(25857): at android.view.View$PerformClick.run(View.java:8816) 
E/AndroidRuntime(25857): at android.os.Handler.handleCallback(Handler.java:587) 
E/AndroidRuntime(25857): at android.os.Handler.dispatchMessage(Handler.java:92) 
E/AndroidRuntime(25857): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(25857): at android.app.ActivityThread.main(ActivityThread.java:4627) 
E/AndroidRuntime(25857): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(25857): at java.lang.reflect.Method.invoke(Method.java:521) 
E/AndroidRuntime(25857): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
E/AndroidRuntime(25857): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
E/AndroidRuntime(25857): at dalvik.system.NativeStart.main(Native Method) 

誰もが何かアドバイスはありますか?私はPYTHONHOMEをエクスポートするシェルスクリプトでpythonへの呼び出しをラップしようとしましたが、それはトリックをしませんでした。

gabe

答えて

3

ちょうど最近、同じ問題が発生しました。 Androidバージョン< = 2.2でProcessBuilderの環境マップを変更できないようです。私が見つけた唯一の回避策は、ProcessBuilderではなくexec()を使用することでした。

String[] cmdarray = {"python/bin/python", "test.py"}; 
String[] envp = {"PYTHONHOME=python"}; 
Process process = Runtime.getRuntime().exec(cmdarray, envp, getFilesDir()); 

役立ちます希望:あなたのケースでは、これはの線に沿って何かをもたらすであろう。
C

関連する問題