我正在尝试使用plumbum在 但是,我在传递 我可以在 我应该如何将此参数传递给plumbum?sort -u -f -t$'\t' -k1,1 file1 > file2
-t$'\t'
参数时遇到问题。这是我的代码:from plumbum.cmd import sort
separator = r"-t$'\t'"
print separator
cmd = (sort["-u", "-f", separator, "-k1,1", "file1"]) > "file2"
print cmd
print cmd()
print separator
和print cmd()
执行后立即看到问题:-t$'\t'
/usr/bin/sort -u -f "-t\$'\\t'" -k1,1 file1 > file2
答案 0 :(得分:1)
您可能偶然发现了命令行转义的限制。
我可以使用subprocess
模块使其工作,传递一个真正的制表字符:
import subprocess
p=subprocess.Popen(["sort","-u","-f","-t\t","-k1,1","file1",">","file2"],shell=True)
p.wait()
此外,完整的python简短解决方案可以满足您的需求:
with open("file1") as fr, open("file2","w") as fw:
fw.writelines(sorted(set(fr),key=lambda x : x.split("\t")[0]))
完整的python解决方案在处理unicity时与sort
完全不同。如果2行具有相同的第一个字段但不是相同的第二个字段,则sort
保留其中一个字段,而set
将保留其中一个字段。
编辑:未经检查,但您刚刚确认它有效:只需调整您的plumbum代码:
separator = "-t\t"
可以正常工作,虽然在3个中,我推荐完整的python解决方案,因为它不涉及外部进程,因此更加pythonic和便携。