如何使用Python包装器在Bash中执行管道



方案:

我有一个bash脚本中的管道,以及某些过程及其论点的列表。如果该过程在我的列表中,我想在管道中执行每个过程(可执行文件(后运行一个Python脚本。(我使用Python 2.7(

我建议的解决方案:

使用Python包装脚本。我已经用我的自定义python脚本替换了管道中的所有可执行文件:

1(检查该过程是否在列表中,则flag = true

2(通过使用subprocess.Popen(process.command, shell=True).communicate()

的原始可执行文件执行该过程

3(如果flag == true,请做某事。

问题:

当我使用当前解决方案运行过程时 subprocess.Popen().communicate(),过程将单独执行而且他们无法将内部过程的输出(子进程(输出到外部过程(父过程(。

例如:

#!/bin/bash
Mean=`P1  $Image1 -M`
P2 "$Image2"  $Mean -F

我们在第二行执行中没有均值的输出值。第二行将执行:

subprocess.Popen("P2 $Image2  nP1  $Image1 -M -F" , shell=True).communicate() 

因此,它返回错误!

python中有更好的方法可以执行这样的过程?

请让我知道是否还有其他建议(我是Bash的初学者(。

根本不需要使用bash。

假设现代python 3.x:

#!/usr/bin/env python
import subprocess
image1 = sys.argv[1]
image2 = sys.argv[2]
p1 = subprocess.run(['P1', image1, '-M'], check=True, capture_output=True)
p2 = subprocess.run(['P2', image2, p1.stdout.strip(), '-F'], check=True, capture_output=True)
print(p2_result.stdout)

请参阅此处,我们指的是p1.stdout.strip(),其中需要p2的参数中的平均值。

最新更新