2011-03-01 175 views
1

这是我的问题: 我有一个.bat文件,它有许多命令。当我使用processbuilder从我的java程序中调用这个bat文件时,它开始在.bat文件中逐行执行命令。但是,当它到达执行perl程序的最后一行时,它会挂起并且程序永远不会结束。它永远挂在那里。任何想法为什么这可能会发生。仅供参考,perl代码没有问题,我可以执行从Java程序执行批处理文件时出错

+1

你可以从java运行perl,带或不带'.bat'脚本吗? – 2011-03-01 10:36:23

+0

我的猜测是PATH环境var没有设置,因此没有找到perl解释器。尝试提供tjhe perl解释器的完整路径:c:\ path \ to \ perl \ perl.exe ... – rene 2011-03-01 10:39:14

+1

我想我们需要看到批处理文件和Perl脚本有任何帮助。看看你是否可以在一个小例子中复制bug行为,你可以在这里发表。 – 2011-03-01 13:25:39

回答

0

嘿,我能够解决这个问题。我所要做的只是在我的java代码中包含一个关闭进程输出流的声明。没有它,它正在等待命令行中的perl程序被永久执行。我不完全确定这种行为,任何信息都可以帮助

2

您的perl程序是否写入标准输出? 我怀疑问题是Java进程将子进程的标准输出和标准错误输出重定向到管道。 该管道的接收端连接到java程序,因此如果您未能读取其输出,则从Java调用的写入标准输出/错误的任何子进程都会阻塞。 您必须从Java程序中删除perl程序的输出或读取子进程的输出(Process.getInputStream()和/或Process.getErrorStream())。

+0

:嘿,我能够解决这个问题。我所要做的只是在我的java代码中包含一个关闭进程输出流的声明。没有它,它正在等待命令行中的perl程序被永久执行。我对这种行为并不确定,任何信息都会有所帮助。 – Max 2011-03-06 06:55:52