使用Expect for Groovy自动化交互式CLI会话

时间:2015-03-05 10:01:04

标签: java

我正在使用此代码: http://groovy.codehaus.org/Expect+for+Groovy

尝试自动化基于python的CLI。

我的测试主要功能如下。

然而,运行它似乎从未实际从进程中读取数据。 如果我将进程更改为/ bin / ls并期望一些文件名,它将正常工作,这使我相信它无法处理python正在等待输入的事实,而/ bin / ls关闭流并刷新它。 / p>

有什么想法吗?感谢。

public static void test2(String[] args){
    println "Main"
    def builder = new ProcessBuilder("/usr/bin/python");
    builder.redirectErrorStream()
    builder.redirectOutput(ProcessBuilder.Redirect.PIPE);
    builder.redirectInput(ProcessBuilder.Redirect.PIPE);

    def expectSession = new IOSession(builder.start());
    expectSession.expect(">>>");
    expectSession.send("print(%d) % (1+1)")
    expectSession.expect("2");
    expectSession.send("quit()");
    expectSession.close();
    println "Done...";
}

1 个答案:

答案 0 :(得分:0)

查看IOSession的来源,看起来这可能是构造函数中的错误。尝试:

def expectSession = new IOSession();
expectSession.addProcess(builder.start());

此外,您必须将\r添加到要发送的字符串的末尾。