0

从 ini 文件中解析错误的值,我如何从用户名 = 字段而不是值中解析用户名?

1) Ini 文件存储有预定义的预设,我需要在 python 中读取

$ cat /var/tmp/file.ini
banner=QUESTIONS sentence
network=lan
programming=pytohn
url=http\://pbx/register?username=E300B1&password=1234&option=localip&localip=
username=E300B1
password=1234
server=pbx

2)代码:我尝试的用户名/密码字段似乎错误

import re,os, time, socket, datetime, threading, subprocess, logging, gtk, gobject
logging.basicConfig(filename='/var/tmp/log.log',level=logging.DEBUG)

def readini(findme):
  f = open('/var/tmp/file.ini', "r")
  for line in f:
    if line:
      if findme in line:
        r= line.split("=")
        return r[1].replace("\\n", "").rstrip()

host = readini("server")
username = preadini("username")
password = readini("password")

command = """curl 'http://%s/a/b?username=%s&password=%s&language=EN'""" % (host, username, password)
logging.debug( command )
os.system( command )

3)输出(错误):

DEBUG:root:curl 'http://192.168.1.10/a/b?username=http\://pbx/register?username&password=http\://pbx/register?username&language=EN'

4)预期输出为:

DEBUG:root:curl 'http://192.168.1.10/a/b?username=E300B1&password=1234&language=EN'
4

1 回答 1

0

问题是您的条件if findme in line不适用于您的文件。在您的文件中,字符串“用户名”位于定义 url 的行中——这就是您看到所看到的输出的原因。

 url=http\://pbx/register?username=E300B1&password=1234&option=localip&localip=

更好的方法是:

def readini(findme):
  f = open('/var/tmp/file.ini', "r")
  for line in f:
    if "=" in line:
        key,val = line.split("=",1)
        if findme in key:
            return val.replace("\\n", "").rstrip()

使用可选的 int arg 进行拆分可确保返回的列表长度为 2,并且它实际上是该行定义的 key,val 对。

于 2013-10-10T01:09:16.857 回答