[英]java runtime.getRuntime.exec( cmd ) with long parameters
我正在為命令行應用程序做前端。 它很長。命令行與此類似:
public String liveShellCommand(){
String cmd="command mode --parameter arg --parameter2 arg2 --parameter3 arg3";
Runtime run = Runtime.getRuntime() ;
Process pr ;
try {
log.progress("sending command: " +cmd);
pr = run.exec( cmd );
pr.waitFor() ;
在我將“模式”開關添加到其中之前,一切似乎都可以正常工作。 從命令行執行“模式”開關。 我嘗試了幾種組合方法,將參數拆分為既不執行也不執行的數組。 我認為它與“模式”不相關,它前面沒有,也不能有。
我究竟做錯了什么?
編輯:我忘了提到我所能看到的是:調試器停止在不可編譯的源代碼上。 我正在使用netbeans,它似乎無法打印出堆棧跟蹤。 它在run.exec(cmd)上停止。 java出問題了嗎?
我能夠使用ProcessBuilder來運行它,而不僅僅是失敗...
它可以很好地解析“命令”,但是當我添加“命令模式”時
java.io.IOException: Cannot run program "command mode": java.io.IOException: error=2, No such file or directory
所以我無法解析。
+1用於將參數作為數組發送。
通過字符串發送所有內容可能在某些系統上有效,但在其他系統上則失敗。
Process start = Runtime.getRuntime().exec(new String[]
{ "java", "-version" });
BufferedReader r = new BufferedReader(
new InputStreamReader(start.getErrorStream()));
String line = null;
while ((line = r.readLine()) != null)
{
System.out.println(line);
}
我知道您已經說過,您嘗試將參數作為字符串數組發送通過,但是沒有成功,但是您是否收到了其他類型的錯誤? 如果其他程序有日志,則可能要查看出了什么問題。 您可以編寫一個簡單的腳本,輸出用於調用的參數以測試實際通過的參數。
使用ProcessBuilder並將其傳遞給String []
String[] cmmm = {arg3,arg4,arg5, arg6,arg7 };
ProcessBuilder pb = new ProcessBuilder(cmmm);
pb.directory(new File(tDir));
Process p = pb.start();
數組就是答案。 由於命令的復雜性,我還使用了ArrayList。 無論如何...定義了arraylist,添加了命令,轉換為數組,顯示了數組,發送了命令。 每個參數都必須在數組中自己的String中。
List<String> list = new ArrayList<>();
list.add("command");
list.add("param");
String[] command = (String[]) list.toArray(new String[0]);
log.progress (list);
run.exec (command);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.