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

使用多个管道从Python执行Shell脚本,python,linux,bash,shell,pipe,Python,Linux,Bash,Shell,Pipe,我想在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/xe

我想在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)])

谢谢你的回答!我已经编辑了上面的帖子。类似的情况?整个管道可以用单个命令
awk-F='/limited/{print gsub(“\”,“,$2)}/etc/xen/$myserver.cfg
(应用了对
$myserver
的必要替换)。