You can get the entire output stream:Process.text için bir hata eşdeğeri? .text kullanarak
def process = "ls -l".execute()
println "Found text ${process.text}"
hata akımını almak için özlü eşdeğer var mı?
You can get the entire output stream:Process.text için bir hata eşdeğeri? .text kullanarak
def process = "ls -l".execute()
println "Found text ${process.text}"
hata akımını almak için özlü eşdeğer var mı?
Sen tim_yates cevap dayanarak iki Appendables (docs here)
def process = "ls -l".execute()
def (output, error) = new StringWriter().with { o -> // For the output
new StringWriter().with { e -> // For the error stream
process.waitForProcessOutput(o, e)
[ o, e ]*.toString() // Return them both
}
}
// And print them out...
println "OUT: $output"
println "ERR: $error"
alır waitForProcessOutput
kullanabilirsiniz, ben Jenkins üzerinde denedim ve çoklu atama ile bu sorunu bulundu: https://issues.jenkins-ci.org/browse/JENKINS-45575
Yani bu çalışır ve ayrıca özlüdür:
def process = "ls -l".execute()
def output = new StringWriter(), error = new StringWriter()
process.waitForProcessOutput(output, error)
println "exit value=${process.exitValue()}"
println "OUT: $output"
println "ERR: $error"
Cevabınızı kabul edeceğim çünkü şu ana kadarki en özlü. Merak ediyorum neden bir process.error 'yoktur. Özellikle, .text öğesinin kullanılması tehlikeli olduğundan, – ripper234
. Çıktı veya hata akışlarına giden metin çıktısı, arabellek değerini aşarsa, akışınız bir kısmı okunana kadar işleminiz durur. Aslında, akışı yakalamak için çıktının ne kadar süreceğini (genellikle hatalar için de geçerli) bilmediğinizde, iyi bir fikirdir. @BillJames yorumu için – billjamesdev
+1. Bir kenara göre, bu ['waitForProcessOutput'] (https://github.com/groovy/groovy-core/blob/master/src/main/org/codehaus/groovy/runtime/ProcessGroovyMethods.java#L206) (çıkışı dinlemek için iki iş parçacığı oluşturur) –