这样做,您需要shell=True
允许 shell 重定向工作。
subprocess.call('sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempout,shell=True)
更好的方法是:
with open(outpath+fnameout,'w') as fout: #context manager is OK since `call` blocks :)
subprocess.call(cmd,stdout=fout)
这避免了一起生成 shell 并且可以安全地免受 shell 注入类型的攻击。在这里,cmd
是您原来的列表,例如
cmd = 'sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempout
cmd = cmd.split()
还应该指出,python 具有非常好的排序工具,所以我怀疑是否真的有必要sort
通过子进程将工作传递给。
最后,与其使用str.split
从字符串中拆分参数,不如使用它可能会更好shlex.split
地处理带引号的字符串。
>>> import shlex
>>> cmd = "foo -b -c 'arg in quotes'"
>>> print cmd.split()
['foo', '-b', '-c', "'arg", 'in', "quotes'"]
>>> print shlex.split(cmd)
['foo', '-b', '-c', 'arg in quotes']