python - 链接的 popen 进程未获得输出

标签 python sorting subprocess

我一直在尝试使用命令行排序对一些非常大的 CSV 进行排序,以便它们准备好在 Python 中进行处理。我正在尝试使用 subprocess 在 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)

关于python - 链接的 popen 进程未获得输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31444408/

相关文章:

python - 如何对 Pandas 中的两个字段进行排序?

python - 如何使用子进程 check_output 获取子进程的 PID

python - 在flask html页面中访问json数据

arrays - 调用函数对 n 个数字的数组进行排序时出错

python - 如何创建带类别的 Matplotlib 条形图?

javascript - 使用特殊字符 javaScript 对数组进行排序

python - 命令行和 subprocess.call 之间的标准输入不一致

python - 后续子进程调用未保存环境变量 (Python)

python - 使用主管运行 python 脚本

javascript - Selenium:如何在Python中使用selenium在内部div中滚动