Shell 将多个参数传递给管道中的外部程序

Shell 将多个参数传递给管道中的外部程序,shell,python-3.x,subprocess,python-decorators,luigi,Shell,Python 3.x,Subprocess,Python Decorators,Luigi,我正在尝试为NGS数据构建一个管道 我制作了一个向shell传递命令的小示例管道。示例管道有两个从shell调用的脚本,它们只是在许多数据帧(本例中为10)中串联(sumtool.py)和相乘(multool.py)值。我的包装器(wrapper.py)处理输入并按顺序传递运行脚本的命令。以下是包装器中代码的相关部分: def run_cmd(orig_func): @wraps(orig_func) def wrapper(*args,**kwargs): c

我正在尝试为NGS数据构建一个管道

我制作了一个向shell传递命令的小示例管道。示例管道有两个从shell调用的脚本,它们只是在许多数据帧(本例中为10)中串联(sumtool.py)和相乘(multool.py)值。我的包装器(wrapper.py)处理输入并按顺序传递运行脚本的命令。以下是包装器中代码的相关部分:

def run_cmd(orig_func):

    @wraps(orig_func)
    def wrapper(*args,**kwargs):
        cmdls = orig_func(*args,**kwargs)
        cmdc = ' '.join(str(arg) for arg in cmdls)
        cmd = cmdc.replace(',','')
        Popen(cmd,shell=True).wait()
    return wrapper

@run_cmd
def runsumtool(*args):
    return args

for file in getcsv():
    runsumtool('python3','sumtool.py','--infile={}'.format(file),'--outfile={}'.format(dirlist[1]))
这可以正常工作,但我希望能够一次为第一个脚本传递所有命令,并使用所有数据帧等待它完成,然后为每个数据帧一次运行第二个脚本,并使用所有命令。由于Popen().wait()等待每个命令,因此需要更长的时间

我尝试将luigi合并为一个解决方案,但我没有成功地运行外部程序或尝试通过luigi传递多个I/O。任何关于这方面的提示都将不胜感激

我设想的另一个解决方案是一次单独传递所有样本,但我不确定如何将其放入python(或任何其他语言)中。这也将解决luigi的I/O问题

谢谢

注1:这是我构建的一个小示例管道。我的主要目的是在管道中调用像bwa、picard这样的程序。。。我无法导入

注2:我已经在使用子流程中的Popen了。你可以在第4行和第5行之间找到它