<p>我尝试在unix风格的管道中使用python。
例如,在unix中,我可以使用管道,例如:</p>
<pre><code>$ samtools view -h somefile.bam | python modifyStdout.py | samtools view -bh - > processed.bam
</code></pre>
<p>我可以通过在python脚本中使用一个<code>for line in sys.stdin:</code>循环来实现这一点,它似乎可以正常工作。在</p>
<p>不过,我希望将这个unix命令内部化为python脚本。所以基本上我会避免进程间的大文件阻塞行为。在</p>
<p>目前,我试图使用<code>Popen</code>来管理每个命令,并将第一个进程的stdout传递给下一个进程的stdin,依此类推。在</p>
<p>在一个单独的python脚本中我有(sep_进程.py)公司名称:</p>
^{pr2}$
<p>在我的python主脚本中,我有以下内容:</p>
<pre class="lang-python prettyprint-override"><code>import sys
from subprocess import Popen, PIPE
# Generate an example file to use
f = open('sees.txt', 'w')
f.write('somewhere over the\nrainbow')
f.close()
if __name__ == "__main__":
# Use grep as an example command
p1 = Popen("grep over sees.txt".split(), stdout=PIPE)
# Send to sep_process.py
p2 = Popen("python ~/Documents/Pythonstuff/Bam_count_tags/sep_process.py".split(), stdin=p1.stdout, stdout=PIPE)
# Send to final command
p3 = Popen("wc", stdin=p2.stdout, stdout=PIPE)
# Read output from wc
result = p3.stdout.read()
print result
</code></pre>
<p>但是p2进程失败<code>[Errno 2] No such file or directory</code>,即使文件存在。在</p>
<p>我需要实现某种类型的<code>Queue</code>和/或使用多处理模块打开python函数吗?在</p>