Python plumbum:在 cmd 参数中传递 $
Python plumbum: Passing $ in an cmd argument
我正在尝试使用 plumbum 在 python 中执行以下命令:
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
- 参数用双引号括起来。
- 在 $ 和 \t 之前插入一个额外的 \。
我应该如何将这个参数传递给 plumbum?
您可能遇到了命令行转义的限制。
我可以使用 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 解决方案与 sort
在处理唯一性时的工作方式并不完全相同。如果 2 行具有相同的第一个字段但第二个字段不相同,sort
保留其中一个,而 set
将保留两个。
编辑:未选中,但您刚刚确认它有效:只需调整您的 plumbum 代码:
separator = "-t\t"
可以工作,尽管在 3 个中,我推荐完整的 python 解决方案,因为它不涉及外部进程,因此更 pythonic 和便携。
我正在尝试使用 plumbum 在 python 中执行以下命令:
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
- 参数用双引号括起来。
- 在 $ 和 \t 之前插入一个额外的 \。
我应该如何将这个参数传递给 plumbum?
您可能遇到了命令行转义的限制。
我可以使用 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 解决方案与 sort
在处理唯一性时的工作方式并不完全相同。如果 2 行具有相同的第一个字段但第二个字段不相同,sort
保留其中一个,而 set
将保留两个。
编辑:未选中,但您刚刚确认它有效:只需调整您的 plumbum 代码:
separator = "-t\t"
可以工作,尽管在 3 个中,我推荐完整的 python 解决方案,因为它不涉及外部进程,因此更 pythonic 和便携。