我想执行一个程序(System.getenv("appdata") + "ffmpeg"
)。我也希望能够得到一个可以让我获得consle输出的过程或其他东西。我之前尝试过“cmd / C”+ System.getenv("appdata") + "ffmpeg"
,但它似乎没有用。任何帮助表示赞赏!
以下是一些代码:
Process p = exec(testFFMpeg);
int ex = -1;
try {
ex = p.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
}
if(ex == 0){
System.out.println("Normal execution, exit value: " + ex);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
do{
try {
line = br.readLine();
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
}
}while(line != null);
}else{
System.out.println("Execution exit value: " + ex);
}
}
private static Process exec(String[] cmd){
try {
return Runtime.getRuntime().exec(cmd);
} catch (IOException e) {
e.printStackTrace();
CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
}
该文件的确切位置是:`System.getenv(“appdata”)+“\ VinVid \”+“ffmpeg.exe”。
答案 0 :(得分:1)
我明白了。输出转到错误流,而不是inputStream。
答案 1 :(得分:0)
您缺少路径分隔符,请尝试此
System.getenv("appdata") + "\\ffmpeg"
答案 2 :(得分:0)
在您的代码中,将此行line = br.readLine();
更改为line += br.readLine();
这是你在java中运行windows进程的方法。
我不知道你想要什么输出。如果您要求打印您运行的流程的输出,此代码有助于:
String line;
String pidInfo ="";
Process p =Runtime.getRuntime().exec(System.getenv("appdata") +"ffmpeg.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
pidInfo+=line;
}
input.close();
System.out.println(pidInfo);