【发布时间】:2013-06-06 19:55:11
【问题描述】:
我想通过调用“排序”命令通过 Python 脚本对制表符分隔的文件进行排序。 如果我使用这个:
subprocess.Popen(["sort", r"-t$'t'", "-k1,2", "input", "-o", "output"]).wait()
我收到此错误:
sort: multi-character tab `$\'t\''
如果我使用shell=True:
subprocess.Popen(["sort", r"-t$'t'", "-k1,2", "input", "-o", "output"], shell=True).wait()
进程只是挂起。
我更喜欢使用第一种方法,没有shell=True。有什么建议吗?
编辑:文件很大。
【问题讨论】:
-
首先,python擅长排序……为什么不用python来排序呢?其次,您希望
-t在您的排序命令中执行什么操作?你的字段分隔符真的是$'t'吗? -
您收到此错误是因为
subprocess正在做它应该做的事情。尝试从 shell 运行sort "-t$'t'" input,你会从sort得到完全相同的错误。 -
Python 擅长排序列表;对
sort程序进行炮击非常适合对可能非常大的文件进行排序。 -
@chepner -- 为什么
sort程序在处理大文件时要比 python 做得更好?据我所知,sort没有进行任何外部合并排序以提高内存效率... -
sort当然适用于不完全适合主内存的文件(至少,我想我记得排序大于我可用内存的文件)。
标签: python bash subprocess popen