簡體   English   中英

從Java運行交互式命令行應用程序

[英]run interactive command line application from java

我通常使用java.lang.ProcessBuilder和java.lang.Process來運行外部命令行程序,並且對運行和完成命令運行良好。 例如,這將在工作目錄中運行帶有參數“ myArg”的“ myProgram”:

List<String> commandLine = new ArrayList<String>();
commandLine.add("myProgram");
commandLine.add("myArg");
ProcessBuilder builder = new ProcessBuilder(commandLine);
builder.redirectErrorStream(true);
Process process = builder.start();

但是,假設我想運行腳本或程序或具有交互式輸入的內容(啟動后提示我提供更多輸入)。 我可以使用與上面類似的代碼在Java中執行此操作,還是需要其他方法? 還是有一些圖書館可以幫助我呢?

根據文檔,您應該能夠重定向輸入和輸出流。 這告訴它使用父進程中的System.in / System.out

builder.redirectInput(ProcessBuilder.Redirect.INHERIT);
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT);

如果要將內容寫到流程的輸入中:

如果源是Redirect.PIPE(初始值),則可以使用Process.getOutputStream()返回的輸出流來寫入子流程的標准輸入。 如果源設置為任何其他值,則Process.getOutputStream()將返回空輸出流。

重定向stdin和stdout當然是簡單命令行程序的一種選擇。

如果您實際上需要編寫按鍵腳本(例如,在測試腳本中),則使用“機器人”類是另一種方法:

編寫一個簡單的.bat文件或Shell腳本來調用Java程序並使用“ <”和“>”重定向操作符,這是第三個選擇。

這完全取決於您要尋找的內容:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM