запустить подпроцесс в цикле Python - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть цикл в python на каждой итерации цикла. Я хочу запустить скрипт bash и после его завершения продолжить цикл и снова запустить скрипт bash:

for batch in something:
    proc = Popen(['./mybash.sh'])
    proc.wait()

Скрипт mybash.shбудет вычислять что-то и отображать значение, используя echo.Однако, когда я запускаю этот код, кажется, что он выполняет скрипт mybash.sh только один раз, поскольку я вижу только значение, отображаемое echo, только для первой итерации.Что не так с кодом?Кстати, я использую Python 3,5

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Popen просто запускает процесс.Вы, вероятно, хотите что-то вроде

from subprocess import run, PIPE

for batch in something:
    print(run(['./mybash.sh'],
        stdout=PIPE, stderr=PIPE,
        check=True, universal_newlines=True).stdout)

check=True предполагает, что ваш скрипт возвращает полезный и действительный код завершения.

Подробнее (много!) См. https://stackoverflow.com/a/51950538/874188

0 голосов
/ 19 декабря 2018

Причина it seems that it executes mybash.sh script only once может быть вызвана:

  • Ваша итерация выполняется только один раз.
  • proc.wait() не возвращается.
  • The ./mybash.sh не работает правильно.

И вы можете изменить свой скрипт следующим образом:

for batch in something:
    # to check the looping times
    print(batch)
    proc = Popen(['./mybash.sh'])
    # to check if the mybash.sh exit normally
    print(proc.wait())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...