"Menggunakan ProcessBuilder untuk pengalihan keluaran"
P粉517090748
P粉517090748 2023-08-24 20:26:08
0
2
453
<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>
P粉517090748
P粉517090748

membalas semua(2)
P粉204079743

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.

P粉818088880

Pengendali ubah hala Shell berada dalam ProcessBuilder中是未知的。将您的命令放在一个shell脚本中并执行它,如这里所示。或者,使用bash -c, seperti yang ditunjukkan di sini.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan