subprocess.call

subprocess.call,第1张

subprocess.call

这样,您需要

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']


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5655054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存