我試圖創建一個程序,允許我通過終端(這是覆盆子pi的OmxPlayer,如果你想知道)用參數執行一個命令,但是我會希望能夠在我啓動命令後與它進行交互。使用processBuilder執行shell命令並與它進行交互
例如我願意做的事情:omxplayer -WIN X1 Y1 X2 Y2 然後就可以按「P」暫停視頻/音頻媒體
我已經擁有的東西,可以啓動omxplayer與參數(實際上它是「ls」,但它應該以完全相同的方式工作),但我不明白如何通過processBuilder啓動命令後如何與終端進行交互。
這裏就是我此刻的了:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class Main1 {
public static void main(String a[]){
InputStream is = null;
ByteArrayOutputStream baos = null;
List<String> commands = new ArrayList<String>();
commands.add("ls");
commands.add("-l");
commands.add("/");
ProcessBuilder pb = new ProcessBuilder(commands);
try {
Process prs = pb.start();
is = prs.getInputStream();
byte[] b = new byte[1024];
int size = 0;
baos = new ByteArrayOutputStream();
while((size = is.read(b)) != -1){
baos.write(b, 0, size);
}
System.out.println(new String(baos.toByteArray()));
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try {
if(is != null) is.close();
if(baos != null) baos.close();
} catch (Exception ex){}
}
}
}
看看這裏的答案,我認爲這會有所幫助。 http://stackoverflow.com/questions/17216049/executing-two-commands-with-process-builder – SpaceCowboy
這與我想要做的接近,但不完全一樣。我試圖與我執行的命令進行交互,而不是在第一個命令之後立即執行第二個命令:/ – Equinox
如何寫入進程的STDIN:http://docs.oracle.com/javase/7/docs/api /java/lang/Process.html#getOutputStream()? – Fildor