You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.1 KiB
Kotlin
78 lines
2.1 KiB
Kotlin
package io.provs.processors
|
|
|
|
import io.provs.escapeNewline
|
|
import org.slf4j.LoggerFactory
|
|
import java.io.File
|
|
import java.io.IOException
|
|
import java.nio.charset.Charset
|
|
|
|
|
|
private fun getOsName(): String {
|
|
return System.getProperty("os.name")
|
|
}
|
|
|
|
open class LocalProcessor : Processor {
|
|
|
|
companion object {
|
|
@Suppress("JAVA_CLASS_ON_COMPANION")
|
|
private val log = LoggerFactory.getLogger(javaClass.enclosingClass)
|
|
|
|
var charset = if (getOsName().contains("Windows")) Charset.forName("Windows-1252") else Charset.defaultCharset()
|
|
init {
|
|
log.info("os.name: " + getOsName())
|
|
log.info("user.home: " + System.getProperty("user.home"))
|
|
}
|
|
}
|
|
|
|
private fun workingDir() : String
|
|
{
|
|
return System.getProperty("user.home") ?: File.separator
|
|
}
|
|
|
|
override fun x(vararg args: String): ProcessResult {
|
|
return execute(true, *args)
|
|
}
|
|
|
|
|
|
override fun xNoLog(vararg args: String): ProcessResult {
|
|
return execute(false, *args)
|
|
}
|
|
|
|
private fun execute(logging: Boolean, vararg args: String): ProcessResult {
|
|
try {
|
|
var prefix = "******************** Prov: "
|
|
if (logging) {
|
|
for (arg in args) {
|
|
prefix += " \"${arg.escapeNewline()}\""
|
|
}
|
|
} else {
|
|
prefix += "\"xxxxxxxx\""
|
|
}
|
|
log.info(prefix)
|
|
|
|
val proc = ProcessBuilder(args.toList())
|
|
.directory(File(workingDir()))
|
|
.redirectOutput(ProcessBuilder.Redirect.PIPE)
|
|
.redirectError(ProcessBuilder.Redirect.PIPE)
|
|
.start()
|
|
|
|
val c = proc.waitFor()
|
|
|
|
val r = ProcessResult(
|
|
c,
|
|
proc.inputStream.bufferedReader(charset).readText(),
|
|
proc.errorStream.bufferedReader(charset).readText(),
|
|
args = args
|
|
)
|
|
if (logging) {
|
|
log.info(r.toString())
|
|
}
|
|
return r
|
|
|
|
} catch (e: IOException) {
|
|
e.printStackTrace()
|
|
return ProcessResult(-1, ex = e)
|
|
}
|
|
}
|
|
}
|