2017-02-21 32 views
0

Следующий код имеет полномочия ввода-вывода на моем локальном ПК и работает правильно. Однако, когда я пытался это сделать на моем сервере windows2012, возникли некоторые проблемы. Он не может правильно запускать код python, используя exec, мой python не может дать окончательный результат. Я думаю, что он не имеет полномочий на ввод-вывод, но почему?java exec запускает программу python, в то время как python не имеет полномочий на ввод-вывод

Java код:

package test; 

    import java.io.BufferedReader; 
    import java.io.BufferedWriter; 
    import java.io.File; 
    import java.io.FileReader; 
    import java.io.FileWriter; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 

    public class test { 

     private static void generateFile() throws IOException{ 
      BufferedWriter bw = new BufferedWriter(new FileWriter("src/test/input.txt", false)); 
      String eventString = "This is a example"; 
      bw.write(eventString); 
      bw.close(); 
     } 

     private static void getFile() throws IOException{ 
      BufferedReader br = new BufferedReader(new FileReader("src/test/output.txt")); 
      String jsonResults = br.readLine(); 
      br.close(); 

     } 

     public static void main(String[] args) throws IOException { 

      generateFile(); 

      Runtime rt = Runtime.getRuntime(); 
      Process pr = rt.exec("python test.py", null, new File("src/test/")); 
      BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); 
      String line; 
      while ((line = in.readLine()) != null) { 
       System.out.println(line); 
      } 
      in.close(); 
      try { 
       pr.waitFor(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } finally { 
       pr.destroy(); 
      } 

      getFile(); 
     } 

    } 

питон код:

f = open('input.txt', 'r') 
line = f.readline() 
with open('output.txt', 'w') as fw: 
    fw.write(line) 

print("Done!") 

ОШИБКА Infomation:

Exception in thread "main" java.io.FileNotFoundException: src\test\output.txt (The system cannot find the specified file.) 
    at java.io.FileInputStream.open0(Native Method) 
    at java.io.FileInputStream.open(FileInputStream.java:195) 
    at java.io.FileInputStream.<init>(FileInputStream.java:138) 
    at java.io.FileInputStream.<init>(FileInputStream.java:93) 
    at java.io.FileReader.<init>(FileReader.java:58) 
    at test.test.getFile(test.java:21) 
    at test.test.main(test.java:49) 

ответ

0

Различные вещи здесь (на данный момент больше "качество кода" подсказки):

  • Ваш плохой метод делает слишком много вещей. Пример:

Отдельные "части", как следующее - все должны идти в простые вспомогательные методы:

String eventString = getJsonEventListInTopic(topicLabel); 
FileWriter fw = ... 
fw.close(); 
  • Значение: вы хотите прочитать о Single Layer Of Abstraction principle
  • ядра укажите, чтобы достигнуть прогресса в вашем фактическом вопросе: когда вы запустите ваш скрипт python вручную в этой системе Windows (с точно такими же аргументами/параметрами) в командной строке - это работает? Вы знаете, это может быть что-то сверхпростым, так как «python.exe не находится на вашем пути»
+0

Во-первых, thx для вашего любезного совета. Я прочитаю его, соответственно. Затем я пробовал этот код как на eclipse, так и запускал скрипт python с помощью cmd на моем компьютере. –

+0

Что еще, я также пробовал этот скрипт с cmd на сервере, и он работал. –

+0

Затем вы хотите добавить всю информацию об ошибке, такую ​​как трассировки стека, к вашему вопросу. – GhostCat