2015-08-26 8 views
0

Я использую механизм java для обработки некоторого контента.Popen communication vs Popen stdin.write()

Мне интересно, возьмет ли он лишние ресурсы, подобные этому.

command = 'some command to run my jar file' 
p = subprocess.Popen(command, stdout = subprocess.PIPE, stdin = subprocess.PIPE) 

Сравнение

output,err = p.communicate('some string that is passed to the java jar') 

против

p.stdin.write('some string that is passed to the java jar \n') 
p.stdin.flush() 
output = p.stdout.readline() 

Чтобы дать некоторый контекст проблемы. Строки генерируются «на лету», и поэтому я не хочу открывать и закрывать приложение Java, все, что генерируется.

Так, например:

Мой питон двигатель создает строку

«Hi i am going home now», который передается в Java двигатель для запуска и получает выход.

Далее он производит 'He is going home now', и процесс повторяется.

Очевидно, что программы Java написать System.out.println(output);

ответ

1

p.communicate() будет ждать завершения процесса в соответствии с the subprocess docs. Если вы не планируете завершать и перезапускать свой Java-процесс каждый раз, когда вы общаетесь, второй метод (чтение/запись) - это все, что у вас есть.