gpt4 book ai didi

java - 从 Java 运行 Perl 脚本(嵌入在 Perl 中)

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:24 24 4
gpt4 key购买 nike

Perl 通过 STDIN 接受脚本。按下 CTRL-D 后,perl 知道“脚本结束”。执行此操作后,将执行脚本。

现在我的问题是:我想从 Java 中做到这一点。

  1. 打开进程 Perl
  2. 将脚本复制到 Perl 进程的 STDIN
  3. 如何在不关闭流的情况下向 CRTL-D 发出 PERL 信号(来自在 Java 中)
  4. 向脚本发送一些输入
  5. 从脚本中获取一些输出。

proc = Runtime.getRuntime().exec("perl", env);
commandChannel = new BufferedWriter(new OutputStreamWriter(proc.getOutputStream()));
responseChannel = new BufferedReader(new InputStreamReader(proc.getInputStream()));
InputStreamReader mymacro = new InputStreamReader(getClass().getResourceAsStream("macro.perl"));

char[] b = new char[1024];
int read;

try
{
while ((read = mymacro.read(b)) != -1)
{
commandChannel.write(b, 0, read);
}
commandChannel.flush();
PERL IS WAITING FOR END OF SCRIPT; ??
} ...

最佳答案

但这正是 CTRL-D 所做的:关闭进程的 STDIN。因此,在您的情况下,关闭 proc.getInputStream() 是在 shell 中模拟它时获得预期行为的适当操作。

如果您想做“其他事情”,那就去做吧。就像通过 STDIN 向您的脚本编写一个特殊命令,然后将其解释为这样并跳转到另一个状态或任何所需的状态

关于java - 从 Java 运行 Perl 脚本(嵌入在 Perl 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7977302/

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