当前位置: 首页 > 面试题库 >

如何通过行而不是变量中的字符进行for循环?

郭阳泽
2023-03-14
问题内容

我有以下代码可以SSH到节点并从其他设备中找到RSSI。

bot_ipv6是ssh到的ipv6地址的列表,脚本使用pexpect来ssh。

for address in bot_ipv6:
    session=spawn('ssh -6 root@'+address+'%wlan0')
    #session.logfile = stdout
    session.expect('password:')
    session.sendline("123456")
    session.expect(prompt)
    session.sendline("iwlist wlan0 scan")
    session.expect(prompt)
    data=session.before
    session.close()

数据现在包含该iwlist wlan0 scan设备的输出。

我想浏览数据并仅获取地址及其对应的RSSI。当命令可以在本地运行并输出到文件时,此代码有效:

with open("rssi.txt") as fd:
    for line in fd:
        cell_line = match(line,"Cell ")
        if cell_line != None:
            cells.append([])
            line = cell_line[-27:]
        cells[-1].append(line.rstrip())


for cell in cells:
    level.append(matching_line(cell,"Quality=").split()[2].split('=')[1])
    address.append(matching_line(cell,"Address: "))

scanned=dict(zip(address, level))

匹配和匹配行是在其中定义的函数,在其他地方则在文件中查找以将字符与所要查找的字符进行匹配。

我的问题是我不知道如何将数据输出到文件,但是如果我尝试像使用文件时那样遍历输出数据中的行:

for line in data:
        cell_line = match(line,"Cell ")
        if cell_line != None:
            cells.append([])
            line = cell_line[-27:]
        cells[-1].append(line.rstrip())

而不是线条,它循环遍历每个字符。

如何将输出打印到可以像以前一样在本地打开并扫描的文件,或者循环遍历数据中的行而不是单个字符?

以下是数据外观的示例(要获得此数据,我将打印数据放入脚本中,然后从输出中复制并粘贴到此处,希望不会丢失任何格式):

iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 02:CA:FF:EE:BA:BE
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=47/70  Signal level=-63 dBm  
                    Encryption key:off
                    ESSID:"nenenenenene-batman"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
                              9 Mb/s; 12 Mb/s; 18 Mb/s
                    Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Mode:Ad-Hoc
                    Extra:tsf=00000000f8083cfe
                    Extra: Last beacon: 72ms ago
                    IE: Unknown: 00136E656E656E656E656E656E652D6261746D616E
                    IE: Unknown: 010882840B160C121824
                    IE: Unknown: 03010B
                    IE: Unknown: 06020000
                    IE: Unknown: 32043048606C
          Cell 02 - Address: D8:5D:4C:AF:C3:14
                    Channel:11
                    Frequency:2.462 GHz (Channel 11)
                    Quality=21/70  Signal level=-89 dBm  
                    Encryption key:on
                    ESSID:"phome"
                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 54 Mb/s
                    Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
                    Mode:Master
                    Extra:tsf=000000ff16ee018d
                    Extra: Last beacon: 3824ms ago
                    IE: Unknown: 000570686F6D65
                    IE: Unknown: 010882848B962430486C
                    IE: Unknown: 03010B
                    IE: Unknown: 2A0104
                    IE: Unknown: 2F0104
                    IE: Unknown: 32040C121860
                    IE: Unknown: 2D1A7C181BFFFF000000000000000000000000000000000000000000
                    IE: Unknown: 3D160B001700000000000000000000000000000000000000
                    IE: Unknown: DD090010180203F4010000
                    IE: Unknown: DD1E00904C337C181BFFFF000000000000000000000000000000000000000000
                    IE: Unknown: DD1A00904C340B001700000000000000000000000000000000000000

问题答案:

使用str.splitlines一个字符串分割成几行:

for line in data.splitlines():
    # Do things.


 类似资料:
  • 问题内容: 以上是我的html。我想改为通过Vue呈现代码。 上面是我的Vue代码,Jinja提出了一个例外,即“任务”未定义,我希望的是Vue而不是Jinja呈现的html代码,我知道可以在Laravel中使用以下代码来完成: 由于我是Jinja的新手,所以有人可以帮助我吗? 问题答案: 另一个选择是重新定义Vue.js使用的分隔符。如果你有很多现有的模板代码,并且希望开始将Vue.js功能添加

  • 问题内容: 我知道在PHP中我们可以做这样的事情: 输出: 我想知道JavaScript是否也可以实现同样的功能。在字符串内部使用变量而不使用串联-编写起来看起来更加简洁和优雅。 问题答案: 您可以利用模板文字并使用以下语法: 模板文字用 反 引号 (``) (重音)括起来,而不是双引号或单引号。 ES2015(ES6)中已引入此功能。 例 那有多干净? 奖金: 它还允许在JavaScript中使

  • 是否有可能像CSV数据集(WHILE-COUNTER-CSV数据集Config)一样,对“用户定义的变量”集进行迭代或循环? 我想为“User Defined Variables”集合中包含的每个变量激发一个JDBC请求(Select语句)。它在CSV文件中工作得很好,但我不知道如何在变量集中循环。有可能吗?我有各种场景,在那里我想要循环一个“用户定义的变量”集。

  • 我试图建立一个简单的Twitter提要应用程序,但我很难实现刷新功能。 以及getlatesttweets函数 这就是我遇到的问题 1) 中的x(全局变量,未在任何其他位置使用)的值。然后(函数(数据)似乎与循环中的其他任何地方不同,并且似乎没有增加。我尝试使用$scope.x或将其作为循环中的函数变量。如果我在tweetsarray中将其硬编码为仅刷新[0],则刷新有效,但[x]返回一个单独的值

  • 问题内容: 如何在bash for循环中使用变量?如果我只是使用标准的for循环,它会达到我的期望 这很好。它循环遍历4次,包括0到3,包括打印我的消息并将计数放在末尾。 当我使用以下for循环尝试相同的操作时,它似乎等于一个字符串,这不是我想要的。 输出: 我试过了 和 他们俩都不做我所需要的。希望有人可以帮助我。预先感谢bash专家对for循环的帮助。 问题答案: 一种方法是使用: 请注意 设

  • 我正试图绘制一个颜色梯度,我希望它沿一个轴均匀分布(在下面的图片中,由角度定义) 当我使用命令时,绘图匹配所需的梯度方向,但沿着它不均匀(沿着圆的点之间形成各种三角形) 这是密码