0

ini ファイルから間違った値を解析しています。値からではなく、username= フィールドからユーザー名を解析するにはどうすればよいですか?

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がファイルで機能しないことです。ファイルでは、文字列「username」が 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 に答える