在python循环中运行子进程

时间:2018-12-19 03:07:09

标签: python loops subprocess

我在循环的每个迭代中都有python中的for循环,我想运行bash脚本,并在终止后继续循环并再次运行bash脚本:

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

mybash.sh脚本将计算内容并使用echo显示一个值。但是,当我运行此代码时,它似乎只执行一次mybash.sh脚本,因为我只能看到echo仅在第一次迭代中显示的值。代码有什么问题?顺便说一句,我正在使用python 3.5

2 个答案:

答案 0 :(得分:0)

it seems that it executes mybash.sh script only once的原因可能是由于:

  • 您的迭代仅运行一次。
  • proc.wait()不返回。
  • ./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())

答案 1 :(得分:0)

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