[英]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當然是簡單命令行程序的一種選擇。
如果您實際上需要編寫按鍵腳本(例如,在測試腳本中),則使用“機器人”類是另一種方法:
http://www.java-tips.org/java-se-tips/java.awt/how-to-use-robot-class-in-java.html
http://download.java.net/jdk7/archive/b123/docs/api/java/awt/Robot.html
編寫一個簡單的.bat文件或Shell腳本來調用Java程序並使用“ <”和“>”重定向操作符,這是第三個選擇。
這完全取決於您要尋找的內容:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.