【发布时间】:2011-11-02 08:05:57
【问题描述】:
Perl 通过 STDIN 接受 scipt。按下 CTRL-D 后 perl 知道“脚本结束”。完成后,脚本被执行。
现在我的问题是:我想从 Java 中做到这一点。
- 打开进程 Perl
- 将脚本复制到 Perl 进程的 STDIN 中
- 如何在不关闭流的情况下向 PERL CRTL-D 发出信号(来自 在java中)
- 向脚本发送一些输入
- 从脚本中获取一些输出。
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; ??
} ...
【问题讨论】:
-
如果您将
__END__写入 Perl 而不是关闭 STDIN,会发生什么? (或^D或^Z——见perldoc.perl.org/perldata.html#Special-Literals) -
我不知道为什么,但是对于一个小脚本它可以工作,但对于我的大脚本不是......我想我会将脚本写入一个临时文件并加载它......