2013-04-09 2 views
2

Я использую класс Java для выполнения Perl-скрипта в Linux-окне. Успешно создается .class. Но когда я выполняю класс, он говорит exit code successful as sop, но я не могу видеть вывод Perl или выполнение скрипта. Если я исполню Perl напрямую, он отлично работает ...Невозможно увидеть вывод Perl, выполняемый из класса Java

Это сценарий Perl:

#!/usr/local/bin/perl 

print ("Enter the distance to be converted:\n"); 
$originaldist = <STDIN>; 
chop ($originaldist); 
$miles = $originaldist * 0.6214; 
$kilometers = $originaldist * 1.609; 
print ($originaldist, " kilometers = ", $miles, " miles\n"); 

И это мой класс Java для вызова скрипта:

import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.BufferedReader; 
import java.io.IOException; 

class test { 
    public static void main(String[] args) throws IOException { 
     String[] aCmdArgs = { "perl", "-e" 
        , "pl newprg.pl" }; 
     Runtime oRuntime = Runtime.getRuntime(); 
     Process oProcess = null; 
     try { 
      oProcess = oRuntime.exec(aCmdArgs); 
      oProcess.waitFor(); 
     } catch (Exception e) { 
      System.out.println("error executing " + aCmdArgs[0]); 
     } 
     /* dump output stream */ 
     BufferedReader is = new BufferedReader 
      (new InputStreamReader(oProcess.getInputStream())); 
     String sLine; 
     while ((sLine = is.readLine()) != null) { 
      System.out.println(sLine); 
     } 
     System.out.flush(); 
     /* print final result of process */ 
     System.err.println("Exit status=" + oProcess.exitValue()); 
     return; 
    } 
} 
+0

Если вы будете с помощью OutputStream из Runtime, а не inputStream? –

+0

спасибо Джо за то, что заглянул в него. U означает, что я должен использовать PrintWriter writer = new PrintWriter (новый OutputStreamWriter ( oProcess.getOutputStream())), я напишу вывод в текстовом файле. – user2254173

ответ

1

Два вопроса :

  • perl -e pl newprg.pl фактически не будет запускать вашу программу из командной строки, так как она не сможет проанализировать данные (n on). Вы, вероятно, имел в виду использовать perl newprg.pl
  • Ваша программа требует ввода, который понадобится для трубы при помощи выходного потока процесса

Например:

try { 
    oProcess = oRuntime.exec(aCmdArgs); 
    PrintWriter writer = new PrintWriter(new OutputStreamWriter(
      oProcess.getOutputStream())); 
    writer.println(200); 
    writer.close(); 
    oProcess.waitFor(); 
} catch (Exception e) { 
    System.out.println("error executing " + aCmdArgs[0]); 
} 
+0

+1: [Perl synopsis] (http://perldoc.perl.org/perlrun.html) – Aubin

+0

+1, спасибо за понимание этой большой помощи. Я изменяю свой код и даю вам знать результат. BIG # hug # снова. – user2254173

+0

Привет - Я изменил свой код perl просто для «print (« Введите расстояние, которое нужно преобразовать: \ n »); и java-код, чтобы попробовать {oProcess = oRuntime.exec ("perl myprg.pl"); PrintWriter writer = новый PrintWriter (новый OutputStreamWriter (oProcess.getOutputStream())); writer.println (200); writer.close(); oProcess.waitFor(); } catch (Исключение e) {System.out.println ("error executing" + aCmdArgs [0]); } System.out.flush();/* распечатать окончательный результат процесса */System.err.println ("Exit status =" + oProcess.exitValue()); вернуть; }} – user2254173

Смежные вопросы