2013-12-11 85 views
0

基本上,我试图打开一个终端窗口并命令它启动一个php脚本。
也可以在脚本输出新行到终端时立即输入并获取输出。如果可能的话,我打算把它做成hidden打开一个独立的终端窗口并用Java运行命令

更像端子输出和输入镜像到Java应用程序本身

我做

Runtime.getRuntime().exec("/usr/bin/open -a Terminal ~/Desktop/test.php"); //mac 

我不知道如何输入,并立即获得一次输出的PHP脚本发送输出到终端。

请帮我做点这里

+1

一般提示:1)阅读(并实现)*所有*的建议[当Runtime.exec()不会](http://www.javaworld.com/jw-12-2000/ JW-1229-traps.html)。这可能会解决问题。如果不是,它应该提供更多关于失败原因的信息。然后忽略它引用'exec'并使用'ProcessBuilder'构建'Process'。还要将'String arg'分解为'String [] args'来解释其本身包含空格的参数。 2)提出问题。 –

+0

@AndrewThompson如果脚本要求更多的输入,我会怎么做? – junyi00

+0

不确定那个,但看看'Process'提供的I/O流。 –

回答

0

创建进程并读取进程的输入流。

(Javadoc中)的getInputStream()

获得子进程的输入流。流获取从此Process对象表示的进程的标准输出流中传送的数据。

//-->check command line<-- 
Process process = Runtime.getRuntime().exec("/usr/bin/php /home/amit/hello.php"); 
BufferedInputStream iStream = new BufferedInputStream(process.getInputStream()); 
BufferedOutputStream oStream = new BufferedOutputStream(process.getOutputStream()); 

byte[] buffer = new byte[1024]; 
while (true){ 
    int length = iStream.read(buffer); 
    if(length == -1) 
     break; 
    System.out.println(new String(buffer, 0, length)); 
} 

注:已经写入Linux。

+0

我试过'System.out.println(stream.read());'但是比脚本运行,没有打印在原始终端上? – junyi00

+0

您应该使用[ProcessBuilder](http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html),而不是Runtime.exec。请参阅Andrew Thomson的评论以查看链接为什么不应该使用Runtime.exec。 – linski

0

而不是在终端执行php脚本,它反过来使用php来执行脚本,只需在php中执行php脚本并捕获输入/输出。

$ which php 
/usr/bin/php 
相关问题