首页 > 解决方案 > python中的循环不适用于文本文件中的所有行

问题描述

此代码用于获取 mikrotik 设备的身份。运行此代码后。仅适用于最后一个 IP

ip.txt 中的行

192.168.3.6   --> NET_6
192.168.3.8   --> NET_8
192.168.3.10  --> NET_10

import os
filename = 'ip.txt'
with open(filename, 'r') as f:
    for line in f:
        pq = os.popen('plink -batch admin@' + line + ' -pw 123456@ "/system identity print"')
        line = pq.readline()
        print(line)

Using username "admin".  
Using username "admin".

  name: NET_10

标签: pythonplinkmikrotik

解决方案


问题是line = pq.readline(),在这里您使用与for相同的变量,您应该使用另一个名称。

简单测试

您可以为测试做的只是将txt文件的每一行打印为以下代码:

FILE_NAME = 'ip.txt'

with open(FILE_NAME, 'r') as f:
  for line in f:
    print(line)

如果代码打印出您的文件,那么您可以添加您的逻辑。

使用 os.popen

现在你做了一个测试,只是读取文件让我们使用os.popen(),但请注意我确实更改了你的代码并更改了变量名,因为你使用的变量名与 for. 试试下面的代码,这应该可以正常工作

import os

FILE_NAME = 'ip.txt'

with open(FILE_NAME, 'r') as f:
  for line in f:
    pq = os.popen('plink -batch admin@' + line + ' -pw 123456@ "/system identity print"')
    response = pq.readline()
    print('Current line: {}'.format(line))
    print('Response from popen: {}'.format(response))

推荐阅读