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

时间:2017-01-21 11:45:51

标签: shell python-3.x subprocess python-decorators luigi

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

我做了一个小例子管道,用于将命令传递给shell。示例管道有两个从shell调用的脚本,它们在许多数据帧中连接(sumtool.py)和乘以(multool.py)值(在本例中为10)。我的包装器(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行之间找到它。

0 个答案:

没有答案