bash中的命令在转换为Python时不起作用

时间:2013-11-20 20:01:40

标签: python python-2.6

我在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', '')

它不起作用;有什么建议吗?

1 个答案:

答案 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;