Передайте несколько списков параметров из python в программу java и верните код возврата, используя subprocess.communicate

Нужна помощь со следующим кодом. Я хочу передать строковые элементы из трех списков в качестве входных данных для java-программы, которую я вызываю в своем скрипте python. Вот что я сделал до сих пор -

import subprocess
from subprocess import PIPE
from subprocess import Popen

amount = ['23.5', '12.5', '56.0', '176.1']
invoice_no = ['11290', '12892', '12802', '23489']
date = ['2/3/19', '12/30/17', '04/21/2018', '8/12/17', '12/21/18']

## problem is proc.communicate(). I am currently passing only invoice_no[i] as input.

for i in range (0, len(invoice_no)):
    proc = subprocess.Popen(['java', '-jar', '/data/python/xyz.jar'],stdin=PIPE,stdout=PIPE, stderr=STDOUT)
    q = proc.communicate(input = invoice_no[i])
    print(q)
## But I want to pass amount and date as input as well. 
## I dont know the syntax for that. I also want output as 1 or 0 i.e success or failure. Does anyone know syntax for this? 

Большинство вопросов, которые я видел, передают одну строку в качестве входных данных. Но это не то, что я ищу. Даже официальный документ подпроцесса не поможет узнать, как передать синтаксис множественных входов. Ссылки - запуск java-программы из скрипта python

Как выполнить java-программу с использованием python, учитывая входы и выходы как

Разве аргумент -jar не должен быть отдельным параметром для Popen?

Dakshinamurthy Karra 22.01.2019 13:35

Не совсем уверен. Я новичок в python. Я смог достичь этого после рассмотрения многих вопросов и документов.

Sanchit Joshi 22.01.2019 14:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
202
1

Ответы 1

Так как я нашел ответ. Я думал, что опубликую это здесь. Может кому пригодится -

   import subprocess
   from subprocess import PIPE
   from subprocess import Popen

   amount = ['23.5', '12.5', '56.0', '176.1']
   invoice_no = ['11290', '12892', '12802', '23489']
   date = ['2/3/19', '12/30/17', '04/21/2018', '8/12/17', '12/21/18']
   for i in range (0, len(invoice_no)):
       proc = subprocess.Popen(['java', '-jar', '/data/python/xyz.jar', invoice_no[i], date[i], amount[i]],stdin=PIPE,stdout=PIPE, stderr=PIPE)
       output = proc.communicate()[0] ## this will capture the output of script called in the parent script.

Другие вопросы по теме