这样,您需要
shell=True允许外壳重定向工作。
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)
这样可以避免完全产生外壳,并且可以防止外壳注入类型的攻击。这
cmd是原始文件的清单,例如
cmd = 'sort -k1,1 -k4,4n -k5,5n '+outpath+fnametempoutcmd = 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']
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)