繁体   English   中英

python中的循环不适用于文本文件中的所有行

[英]loop in python not working for all line in text file

此代码用于获取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

问题是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))

您的代码输出:

Using username "admin".
Current line: 192.168.3.6

Response from popen: 
Using username "admin".
Current line: 192.168.3.8

Response from popen: 
Current line: 192.168.3.10
Response from popen:   name: NET_10

为了测试运行此代码:

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"')
    print('plink -batch admin@' + line + ' -pw 123456@ "/system identity print"')
    response = pq.readline()

plink -batch admin@192.168.3.6
 -pw 123456@ "/system identity print"
Using username "admin".
plink -batch admin@192.168.3.8
 -pw 123456@ "/system identity print"
Using username "admin".
plink -batch admin@192.168.3.10 -pw 123456@ "/system identity print"

如何将字符串合并成一行?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM