我开始认为我的搜索技能不足。
我试图找到有关如何使用Groovy的任何文章,以打开一个交互式过程,读取其输出,然后根据输出文本将其写入该过程。我所能找到的就是如何打印,读取和写入文件。没什么要写一个交互式过程的。
如果可能的话,如下所示:
def process = "some-command.sh".execute()
process.in.eachLine { line ->
if (line.contains("enter password")) {
process.out.write("myPassword")
}
}
这可以从过程输出中读取:
def process = "some-command.sh".execute()
process.in.eachLine { line ->
println line
}
尽管在进程要求输入时它会停止。它不会打印出问题所在的行。
编辑:找出为什么不打印带有询问密码的行。这不是一条新线。问题是简单的印刷品(不是println)。当没有新行时,我该如何阅读?
有人告诉我期望可以使用,但是我正在寻找不需要依赖项的解决方案。
答案 0 :(得分:0)
1.bat
@echo off
echo gogogo
set /P V=input me:
echo V=%V%
此脚本在:
之后等待输入
gogogo
input me:
这意味着eachLine
没有为input me
触发,因为之后没有new line
无论如何,前一行gogogo
都会被捕获
及以下脚本适用于gogogo
,但不适用于input me
常规
def process = "1.bat".execute()
process.in.eachLine { line ->
if (line.contains("gogogo")) {
process.out.write("myPassword\n".getBytes("UTF-8"))
process.out.flush()
}
}
groovy2
可能可以优化。.以下脚本无需换行即可工作:
def process = "1.bat".execute()
def pout = new ByteArrayOutputStream()
def perr = new ByteArrayOutputStream()
process.consumeProcessOutput(pout, perr) //starts listening threads and returns immediately
while(process.isAlive()){
Thread.sleep(1234)
if(pout.toString("UTF-8").endsWith("input me:")){
process.out.write("myPassword\n".getBytes("UTF-8"))
process.out.flush()
}
}