"Menggunakan ProcessBuilder untuk pengalihan keluaran"
P粉517090748
2023-08-24 20:26:08
<p>Saya cuba mengubah hala keluaran proses yang dimulakan oleh ProcessBuilder menggunakan kod berikut: </p>
<pre class="brush:php;toolbar:false;">ProcessBuilder pb = new ProcessBuilder("/myScript >> /myLogFile 2>&1 <& - &");
Peta<String, String> env = pb.environment();
env.clear();
env.put("var1", "val1");
env.put("var2", "val2");
pb.redirectErrorStream(true);
Proses p = pb.start();</pre>
<p>Tetapi ia gagal, melontar pengecualian: </p>
<blockquote>
<p>Pengecualian dalam urutan "utama"
java.io.IOException: Tidak boleh dijalankan
program
"/myScript>>
/myLogFile
2>&1 <& - &": java.io.IOException:
ralat=2, Tiada fail atau direktori sedemikian di
java.lang.ProcessBuilder.start(ProcessBuilder.java:460)</p>
</blockquote>
<p>Apabila saya hanya lulus "/myScript" ia berfungsi dengan baik. </p>
<p>Skrip adalah perl, sebarang cadangan/komen tentang mengapa ia gagal? </p>
<p>Saya cuba menghantarnya sebagai parameter berasingan seperti <code>new ProcessBuilder("/myScript",">>","/myLogFile")</code> fail log, dan envVars juga tidak akan diterima. </p>
Mengikut keperluan anda, bermula dari Java7 anda boleh terus menggunakan ProcessBuilder, hanya lulus fail boleh laku sebagai parameter dan gunakan
redirectInput()
、redirectOutput()
和redirectError()
dalam kelas ProcessBuilder untuk mengubah hala/memintas aliran keluarannya.Pengendali ubah hala Shell berada dalam
ProcessBuilder
中是未知的。将您的命令放在一个shell脚本中并执行它,如这里所示。或者,使用bash -c
, seperti yang ditunjukkan di sini.