gpt4 book ai didi

python - 在 Python 中链接子进程

转载 作者:行者123 更新时间:2023-12-04 00:46:33 25 4
gpt4 key购买 nike

您好,我有一个关于在 python 中将输入和输出与子进程链接起来的问题。我试图通过将一个步骤的输出传递给另一个子进程而不是将其输出到文件来跳过一个步骤的输出来简化程序。然后打开另一个进程以在该文件上运行。

例如第一个过程使用 SAMTOOLS 从大型 bam 文件输出特定染色体。所以...bigfile.bam 被读入并输出 chromosome22.bam

下一个子进程使用 BEDTOOLS 将 chromosome22.bam 转换为 chromosome22.bed所以...chromosome22.bam 被读入并输出 chromosome22.bed

我想做的是将第一个进程的标准输出传递给第二个进程,这样就不需要中间文件了。

到目前为止我有这个...

for x in 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,'X','Y':
subprocess.call("%s view -bh %s %s > %s/%s/%s.bam" % (samtools,bam,x,bampath,out,x), shell=True)

这将生成染色体[1-22,X,Y].bam 文件。但是我可以避免这种情况并在同一个循环中放置另一个子进程命令以将它们转换为 bed 文件吗?

bed转换的命令是:

bedpath/bedtools bamtobed -i [bamfile] > [bedfile]

最佳答案

请看replacing shell pipeline文档中的示例。

output=$(dmesg | grep hda)

变成:

p1 = Popen(["dmesg"], stdout=PIPE)
p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]

解释是:

The p1.stdout.close() call after starting the p2 is important in order for p1 to receive a SIGPIPE if p2 exits before p1.

关于python - 在 Python 中链接子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9068586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com