gpt4 book ai didi

java - 如何通过在java中运行tcl脚本从jatcl中的标准输出读取数据

转载 作者:太空宇宙 更新时间:2023-11-04 06:27:52 24 4
gpt4 key购买 nike

我基本上有两个问题。我正在使用 JACL 解释器在 JAVA 中运行 TCL 脚本。

我的问题是:

  1. 运行tcl文件后如何从标准输出获取数据?

  2. 使用 jatcl 执行时如何为 tcl 脚本传递参数?

例如:
样本.tcl:

`puts "Hi this is from tcl"  `

当使用java运行时如下:

`Interp i = new Interp();
i.eval("source sample.tcl");`

然后输出将被写入JAVA的stdout控制台。我想将该输出读取到某个变量,例如 x[] = i.eval("sample.tcl") 那么 x 应该包含 Hi this is from tcl。

  • 如何将一些参数传递给sample.tcl
  • 最佳答案

    获得标准输出有点困难 - 您必须做大量工作来创建自己的 tcl.lang.channel.Channel 实例,然后将其插入到 TclIO.registerChannel() 中,这对于刚开始的人来说并不适合 — 但如果您只想与 Tcl 程序通信,则通常不需要这样做。在 eval 完成后,脚本的结果(不是标准输出,而是脚本中最后一个命令的结果)将通过 InterpgetResult() 方法获得。

    Interp interp = new Interp();
    interp.eval("source sample.tcl");
    String result = interp.getResult().toString();

    更有可能的是,一旦您获取了脚本,您就可以在同一个解释器中调用命令并检查它们的结果。这样效果更好。

    Interp interp = new Interp();
    interp.eval("source sample.tcl");
    String arg = "abc";
    interp.eval("sampleCommand " + arg);
    String result = interp.getResult().toString();

    如果您想传递更复杂的内容,最简单的方法是在调用脚本之前将要传递的值存储在 Tcl 变量中,然后脚本可以在需要时从变量中提取值。

    interp.setVar("theVar", "the value, which may have spaces in it", 0);
    interp.eval("sampleCommand $theVar");
    <小时/>

    如果您坚持阅读脚本标准输出,您可以尝试以下操作:

    Interp interp = new Interp();
    TclByteArrayChannel tbac = new TclByteArrayChannel(interp);

    // WARNING untested, but I think you have to unregister the old stdout first
    TclIO.unregisterChannel(interp, TclIO.getStdChannel(StdChannel.STDOUT));
    TclIO.registerChannel(interp, tbac);

    interp.eval("source sample.tcl");

    // The channel will have had *bytes* written to it, so that's what we ought to get
    byte[] bytes = TclByteArray.getBytes(interp, tbac.getTclByteArray());

    我真的不推荐这个。如果您使用任何其他语言(例如 C 或 C++)与 Tcl 交互,我也不推荐它。 Tcl设计是为了在我之前描述的解释器结果级别进行集成;您会发现处理任何复杂的事情变得更加容易。

    关于java - 如何通过在java中运行tcl脚本从jatcl中的标准输出读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26541669/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com