Grails uygulamamda uzun süren bir komut satırı işlemini başlatmak, çıktı aldığında her bir çıktı satırını konsola kaydetmek ve diğer öğeleri eşzamansız olarak yapmak istiyorum. faaliyetler devam ediyor. (Bir noktada, bir dosyaya giriş yapmak ya da belirli değerleri aramak ve diğer eylemleri tetiklemek gibi, çıktıdaki her satır ile başka bir şey yapmak istiyorum. Ancak konsola giriş yapmak bu sorunun amaçları açısından iyidir.)İşlem çıktısını kaydetmenin en müthiş yolu
Bunu yapmak için geldiğim kod aşağıdadır. İşe yarıyor ama logger
iş parçacığını açıkça sona erdirmeden başlayarak beni biraz rahatsız ediyor - düzgün bir şekilde sona erecek mi? bir zombi olabilir mi? Groovy'ye işlem çıktısını doğrudan System.out
akışına - command.execute(outputStream=System.out)
- gibi bir şey göndermesini söylemeyi tercih ederim, ancak bunu yapmanın engellenmeyen bir yolunu bulamadı. Daha iyi bir yol önerebilir misin? Groovy docs for Process baktığımızda
def runCommand(command) {
def process = command.execute()
def out = process.getInputStream()
def logger = Thread.start { out.eachLine { println it } }
process.waitForOrKill(TIMEOUT_IN_MILLIS)
return process // use to get exit code et cetera
}
Evet, bu harika çalışıyor! Bazı sebeplerden dolayı execute() yönteminde bir sihir bekliyordum, size geri verdiği Süreç nesnesinde değil. Teşekkürler! –