我是一个新手学习到Python,并在命令行工作,如管道。
我读过子鼓励的方式,而不是使用os.system。 我创建一个脚本调用外壳和我一直无法使用子做。 使用使用os.system是易如反掌,但:
os.system("cut -f1-4 " + temp1.name + "| uniq --count | sort -rn > " + temp2.name)
我用的子进程的成功为其他命令,而不是那些以组合多个工具“|”。 读子Python文档是令人困惑,而不是对我很有帮助。 我也试着寻找其他的问题,但找不到类似我的问题的东西。 这是我试过什么(失败):
subprocess.call = (["cut", "-f1-4", temp1.name, "|", "uniq", "--count", "|", "sort". "-rn"], stdout = open(temp2.name, 'w'))
我也试图与sp.Popen代sp.call,但未能成功。 任何人都可以请一些明显的例子和说明帮助? 谢谢!
如果你想使用管道应添加shell=True
subprocess.check_output("cut -f1-4 " + temp1.name + "| uniq --count | sort -rn > " + temp2.name, shell=True)
请注意,如果temp1.name
或temp2.name
来自非置信源(例如,从在web应用中由一个用户所提供的数据),使用shell=True
是会带来安全隐患。
这是值得考虑看看大图书馆蟒蛇SH ,它是Python的一个完整的子界面,使您可以调用任何程序,就好像它是一个功能,而更重要的是,这是令人愉快的Python的。
对于在这种情况下,您的特定需求,它提供了一些“先进的管道”功能,某事像这样:
# the inner command executes first, then sends its data to the outer command
from sh import *
sort(uniq(cut("-f1-4", _in="temp1.name"), "--count"), "-rn", _out="temp2.name")