java.lang.Runtime.exec(...)を呼び出していますが、これはコマンドラインを配列として受け入れるようで、単一の文字列を使用したいと考えています。
単一の文字列を使用して同じことを行うにはどうすればよいですか?
java.lang.Runtime.exec(...)を呼び出していますが、これはコマンドラインを配列として受け入れるようで、単一の文字列を使用したいと考えています。
単一の文字列を使用して同じことを行うにはどうすればよいですか?
2番目のパラメーターを渡すnull
と、現在の環境が継承されます。
System.getEnv()
現在の環境を変更する場合は、次のように構築できます。
private static String[] getEnv() {
Map<String, String> env = System.getenv();
String[] envp = new String[env.size()];
int i = 0;
for (Map.Entry<String, String> e : env.entrySet()) {
envp[i++] = e.getKey() + "=" + e.getValue();
}
return envp;
}
アップデート
あなたはあなたのJavaパスをチェックすることができますSystem.out.println(System.getenv("PATH"));
パスに問題がない場合は、
String[] commands = new String[] { "bash", "-c", "python foo/bar.py" };
Runtime.getRuntime().exec(commands, null, new File("/workingDir"));
リンクされた Javadoc から:
envp
- 文字列の配列。各要素にはname=valueの形式の環境変数設定が含まれます。またはnull
、サブプロセスが現在のプロセスの環境を継承する必要がある場合。
したがってnull
、2 番目のパラメーターを渡すだけで、環境が継承されます。
ドキュメントから:
envp
- 文字列の配列。各要素には、name = valueの形式の環境変数設定が含まれます。またはnull
、サブプロセスが現在のプロセスの環境を継承する必要がある場合。
null
その引数を渡したいようです。
現在、コマンド ラインを 1 つの文字列としてシステム コマンドを呼び出し、現在のディレクトリを指定する方法はありません。
Java API にはこの基本機能が欠けているようです :)
回避策は、文字列の代わりに配列バージョンを使用することです。