2013-05-06 52 views
1

我有以下代码ssh到一个节点,并找到其他设备的RSSIs。如何通过行而不是变量中的字符进行for-loop循环?

bot_ipv6是一个ipv6地址列表ssh到和脚本使用pexpect到ssh。

for address in bot_ipv6: 
    session=spawn('ssh -6 [email protected]'+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)) 

在哪里比赛和匹配线的功能定义别的地方那样子在该文件中匹配的字符是什么期待的。

我的问题是,我不知道如何将数据输出到文件,但如果我尝试去通过lineds输出数据,因为我使用的文件时做到:

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 

回答

11

使用str.splitlines将字符串分割成线:

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

这完美地工作。感谢这么快的回复。我会尽可能标记正确的 – 2013-05-06 17:24:10

相关问题