我在bash中有这个命令:
ACTIVE_MGMT_1=ssh -n ${MGMT_IP_1} ". .bash_profile; xms sho proc TRAF.*" 2>/dev/null |egrep " A " |awk '/TRAF/{print $1}' |cut -d "." -f2;
我试图用Python这样做:
active_mgmgt_1 = os.popen("""ssh -n MGMT_IP_1 ". .bash_profile; xms sho proc TRAF.*" 2>/dev/null |egrep " A " |awk '/TRAF/{print $1}' |cut -d "." -f2""") ACTIVE_MGMT_1 = active_mgmgt_1.read().replace('\n', '')
它不起作用;有什么建议吗?
答案 0 :(得分:0)
您的popen呼叫需要设置为通过管道进行通信。
同时停止尝试将所有内容放在一行上 - python不需要它,并在可读代码上放置了很多功能。
我强烈建议在python中进行字符串处理而不是egrep,(在python中使用find或re),awk(find或egrep)和cut(string split)。
还建议使用subprocess.Popen而不是os.popen函数。有人建议使用shlex.spilt来解决这类问题。
import subprocess
import re
import os
MGMT_IP_1 = os.getenv('MGMT_IP_1')
sp = subprocess.Popen(
['ssh', '-n', MGMT_IP_1, '. .bash_profile; xms sho proc TRAF.*'],
stdout=PIPE, stderr=None)
(result, outtext) = sp.communicate()
# Proceed to process outtext from here using re, find and split
# to the equivalent of egrep " A " |awk '/TRAF/{print $1}' |cut -d "." -f2;