链接的 popen 进程没有得到输出

Chained popen processes not getting output

我一直在尝试使用命令行排序对一些非常大的 CSV 进行排序,以便它们可以在 Python 中进行处理。我正在尝试使用子流程在 Python 中执行此操作,但无法使其正常工作。这是代码:

import subprocess
fn = 'path/to/filename'
p1 = subprocess.Popen(shlex.split('tail -n +2 {}'.format(fn)), stdout=subprocess.PIPE)
p2 = subprocess.Popen(shlex.split("sort -t$'\t' -k2,2n -k3,3"), stdin=p1.stdout, stdout=subprocess.PIPE)
output = p2.communicate()[0]
print(output)

当我打印时

p1.communicate()[0]

我得到了文件的字节流,正如预期的那样,但是当我打印时

p2.communicate()[0]

我得到一个空的字节流,我不明白为什么。

附带说明一下,如果有更好的方法来对太大而无法放入内存的 CSV 进行排序,那么我很想听听。

您的排序命令的 -t 标志中有一个多余的美元符号,将其删除,它应该可以工作:

p2 = subprocess.Popen(shlex.split("sort -t'\t' -k2,2n -k3,3"), stdin=p1.stdout, stdout=subprocess.PIPE)