Дождаться результата после вызова исполняемого файла JAR с подпроцессом python - PullRequest
0 голосов
/ 13 апреля 2020

Я хочу выполнить файл jar из python с помощью команды popen из подпроцесса. Файл jar берет текст из файла input.txt и записывает результат xml в файл output.txt. Когда я выполняю свой код, он не ждет, пока файл jar не будет записан в файл output.txt, поэтому возвращаемая строка пуста. Файл jar записывается в файл output.txt после того, как функция возвращает пустой результат.

    inputFile = open(r"input.txt","w")
    inputFile.write(inputstring)
    subprocess.Popen("java -jar ChemicalTagger.jar")
    outputFile = open(r"output.txt.","r")
    return outputFile.read()

Итак, я попробовал эти два способа:

  1. Использование команды вызова вместо Popen
  2. Используя команду cumminicate следующим образом:
def callChemTagger(inputstring):
        inputFile = open(r"input.txt","w")
        inputFile.write(inputstring)
        p = subprocess.Popen("java -jar ChemicalTagger.jar")
        p.communicate()
        outputFile = open(r"output.txt.","r")
        return outputFile.read()

В обоих вариантах он ждет после выполнения команды, но в конце это отображается в консоли:

line 1:0 no viable alternative at input '<EOF>'
Successfully wrote to the file.
<?xml version="1.0"?>
<Document />

Первая строка - это сообщение об ошибке. Вторая строка - это сообщение об успешном завершении работы с файлом jar, а затем он возвращает пустой документ xml, так как не было введенной строки.

Буду рад вашей помощи!

...