在 GitHub 上编辑此页面

从 UNIX 管道读取数据。

问题

在许多情况下,从 Unix 管道读取数据比从文件读取数据更可取。一个例子是从压缩文件读取序列,这通常比解压缩文件然后读取数据更可取。

您也可以在 Windows 命令行中使用管道,但这不像在 Unix 环境下那么灵活。

解决方案

此示例脚本使用 Bio.SeqIOstdin 读取 Solexa/Illumina FASTQ,将数据转换为 Sanger FASTQ(使用 PHRED 评分)并将其写入 stdout。有关一些背景信息,请参阅此有关 转换序列文件 的更通用页面。

import sys
from Bio import SeqIO

SeqIO.convert(sys.stdin, "fastq-solexa", sys.stdout, "fastq")

管道是命令行的功能,它使程序或命令的 stdout 输出能够定向到另一个命令或程序的 stdin 输入。例如,以下 shell 命令可用于提取压缩的序列并将其传递给脚本(solexa2sanger_fq.py)。

gunzip -c some_solexa.fastq.gz | python solexa2sanger_fq.py

这将以 Sanger FASTQ 格式将序列写入 stdout - 在这种情况下是屏幕。

重定向类似于使用管道,但不是将一个程序的输出定向到另一个程序的输入,而是将文件的内容重定向到程序的 stdin,以及/或将程序的 stdout 输出重定向到文件。在此示例中,Python 脚本从输入文件重定向获得其数据,而原本要打印到屏幕的输出则被重定向到输出文件。

python solexa2sanger_fq.py < some_solexa.fastq > some_phred.fastq

重定向也可以用于将程序或命令的 stderr 重定向到文件。有关使用重定向的更多示例,请参见 此处