[英]Execute Shell Script from Python with multiple pipes
我想在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)])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.