2013-05-20 57 views
0

运行调用Runtime.getRuntime()。EXEC()输出从执行命令行程序不同直接

/usr/bin/mediainfo --Inform='Video;%Duration%' /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv 

从终端给我此输出

并运行这在java

 Process p1; 
    try { 
     p1 = Runtime.getRuntime().exec("/usr/bin/mediainfo --Inform='Video;%Duration%' /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv"); 

     BufferedReader input1 = new BufferedReader(new InputStreamReader(p1.getInputStream())); 
     String line1; 
     while ((line1 = input1.readLine()) != null) { 
      System.out.println("-"+line1); 
     } 
     input1.close();   

     p1.waitFor();    


    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

结果

-General 
-Complete name : /home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv 
-Format         : Flash Video 
-File size        : 62.0 MiB 
-Duration         : 15mn 3s 
-Overall bit rate       : 576 Kbps 
-Tagging application  : Yet Another Metadata Injector for FLV - Version 1.4 
- 
-Video 
-Format         : AVC 
-Format/Info        : Advanced Video Codec 
-Format profile       : [email protected] 
-Format settings, CABAC     : Yes 
-Format settings, ReFrames    : 4 frames 
-Codec ID         : 7 
-Duration         : 15mn 3s 
-Bit rate         : 512 Kbps 
(much more here) ... 

我如何得到我的调用Runtime.getRuntime所需的输出(903520),()。EXEC(CMD)?

编辑:固定格式

+2

提示 - 在发布前检查你的问题在预览窗口。这格式不会看起来很健康,我... –

+0

对此深感抱歉... – daker

+0

不知道太多关于什么'在/ usr/bin中/ mediainfo'呢,是不是清楚你如何参数必须被解释引起第二组输出?这似乎特别奇怪,如果它通常会输出一个六位数字。 –

回答

4

的命令行外壳做了一些魔法为你这Runtime.exec()确实你不

在这种情况下,我猜,shell会在您的命令行中解释(并忽略)'标记。

所以请尝试这个版本,其中'已被删除,命令行已经分裂成手的部分(另一个常见问题):

String[] args = new String[]{ 
    "/usr/bin/mediainfo", 
    "--Inform=Video;%Duration%", 
    "/home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv" 
}; 
Runtime.getRuntime().exec(args); 
+0

* arrghh *一个浪费时间。非常感谢! – daker

1

注意,有一个Runtime.exec(String)一个Runtime.exec(String[])
您是否尝试了第二种方法,只是为了确保字符串命令正在被解释为它应该的方式?

从文档:

public Process exec(String command) 
      throws IOException 

执行在一个单独过程中的指定的字符串命令。 (...)


public Process exec(String[] cmdarray) 
      throws IOException 

执行在一个单独过程中的指定的命令和参数。 (...)


你可以试试:

String[] myArgs = new String[]{ 
    "/usr/bin/mediainfo", 
    "--Inform='Video;%Duration%'", 
    "/home/daniel/upload/videos/4/f/6/e/f/4f6ef2e0d67c4.flv" 
}; 

Process p1; 
try { 
    p1 = Runtime.getRuntime().exec(myArgs); 
     ... 
} 
+0

是的,我都试过了!他们给出相同的确切输出。 – daker

相关问题