python 如何从os.system命令中提取单个单词?

zpqajqem  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(151)

我正在写一个python程序,在那里我做了一些os.system(cmd)。我需要从终端输出中提取一个单词。输出包含一系列信息。在这些信息中,我只需要参数address,作为一个简单的字符串。我该怎么做呢?这是一个输出的例子:

--------------------------------
  General            |  dbus path: /org/freedesktop/ModemManager1/Bearer/1
                     |       type: default
  --------------------------------
  Status             |  connected: yes
                     |  suspended: no
                     |  interface: wwp0s20f0u3i2
                     | ip timeout: 20
  --------------------------------
  Properties         |        apn: wap.tim.it
                     |    roaming: allowed
  --------------------------------
  IPv4 configuration |     method: static
                     |    address: 10.200.210.208
                     |     prefix: 27
                     |    gateway: 10.200.210.209
                     |        dns: 217.200.201.65, 217.200.201.64
                     |        mtu: 1500
  --------------------------------
  Statistics         |   duration: 1290

我做过:

proc=subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, )
  output=proc.communicate()[0]
  print(output)

但很明显,它返回了整个输出。在命令中还包含grep不是一个好的解决方案。输出格式不正确。我需要:

10.200.210.208
2w3kk1z5

2w3kk1z51#

您可以按照以下方式使用正则表达式执行该任务

import re
output = '''  --------------------------------
  General            |  dbus path: /org/freedesktop/ModemManager1/Bearer/1
                     |       type: default
  --------------------------------
  Status             |  connected: yes
                     |  suspended: no
                     |  interface: wwp0s20f0u3i2
                     | ip timeout: 20
  --------------------------------
  Properties         |        apn: wap.tim.it
                     |    roaming: allowed
  --------------------------------
  IPv4 configuration |     method: static
                     |    address: 10.200.210.208
                     |     prefix: 27
                     |    gateway: 10.200.210.209
                     |        dns: 217.200.201.65, 217.200.201.64
                     |        mtu: 1500
  --------------------------------
  Statistics         |   duration: 1290'''
address = re.search("address: ([0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)",output).group(1)
print(address) # 10.200.210.208

说明:我使用带有单个捕获组的模式,该模式封装在()中,然后使用.group(1)进行访问
免责声明:我假设地址行总是存在的,地址是以4个基数为10的数字的形式剪切的.字符。
注意:为了简洁起见,我将output设置为多行字符串,而不是调用命令。

bzzcjhmw

bzzcjhmw2#

Python有elagent和simple文本处理方法,可用于提取数据,如使用string.find

s = output
start = 'address'
end = 'prefix'
mask =  (s[s.find(start)+len(start):s.rfind(end)])
print(mask)

产出数量

: 10.200.210.208

以后如果你想像这样清理输出

mask = mask.replace(":",'').replace('|','')
print(mask)

其输出#

10.200.210.208

相关问题