使用多个pipe道从Python执行Shell脚本

我想在python脚本中执行下面的shell命令:

dom=myserver cat /etc/xen/$myserver.cfg | grep limited | cut -d= -f2 | tr -d \" 

我有这个:

 dom = myserver limit = subprocess.call(["cat /etc/xen/%s.cfg | grep limited | cut -d= -f2", str(dom)]) subprocess.call(['/root/bin/xen-limit', str(dom), str(limit)]) 

这不起作用,但我不知道为什么..

更新:

 c1 = ['cat /etc/xen/%s.cfg'] p1 = subprocess.Popen(c1, stdout=subprocess.PIPE) c2 = ['grep limited'] p2 = subprocess.Popen(c2, stdin=p1.stdout, stdout=subprocess.PIPE) c3 = ['cut -d= -f2'] p3 = subprocess.Popen(c3, stdin=p2.stdout, stdout=subprocess.PIPE) c4 = ['tr -d \"'] p4 = subprocess.Popen(c4, stdin=p3.stdout, stdout=subprocess.PIPE) result = p4.stdout.read() limit = subprocess.call([result]) subprocess.call(['/root/bin/xen-limit', str(dom), str(limit)]) 

你可以粘贴几个子进程:

 c1 = ['ls'] p1 = subprocess.Popen(c1, stdout=subprocess.PIPE) c2 = ['wc'] p2 = subprocess.Popen(c2, stdin=p1.stdout, stdout=subprocess.PIPE) result = p2.stdout.read() 

注意我们是如何将p2的stdin设置为p1的stdout的。

编辑:简化了这个例子

做好了! :D谢谢

 dom = myserver c1 = ['/bin/cat', '/etc/xen/%s.cfg' % (str(dom))] p1 = subprocess.Popen(c1, stdout=subprocess.PIPE) c2 = ['grep', 'limited'] p2 = subprocess.Popen(c2, stdin=p1.stdout, stdout=subprocess.PIPE) c3 = ['cut', '-d=', '-f2'] p3 = subprocess.Popen(c3, stdin=p2.stdout, stdout=subprocess.PIPE) c4 = ['tr', '-d', '\"'] p4 = subprocess.Popen(c4, stdin=p3.stdout, stdout=subprocess.PIPE) result = p4.stdout.read() subprocess.call(['/root/bin/xen-limit', str(dom), str(result)])