1

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

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

4

0 回答 0