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

时间:2015-07-16 02:27:10

标签: python sorting subprocess

我一直在尝试使用命令行排序对一些非常大的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分类太大而不适合记忆,那么我很乐意听到它。

1 个答案:

答案 0 :(得分:1)

您的sort命令的-t标志中有一个无关的美元符号,删除它并且它应该有效:

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