方案:
我有一个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
的参数中的平均值。