2011-05-12 2 views
2

웹 페이지에서 여러 양식 필드를 입력해야합니다.
게시 할 수 있도록 http POST 파트를 완성했습니다. 데이터를 웹 페이지에 저장합니다.
키/값 쌍의 사전을 만들고 웹 페이지에 양식 필드를 채운 부분도 완성되었습니다.텍스트 파일에서 줄 단위로 키/값 쌍 읽기 및 urlopen http 함수에 dict 전달

키/값 쌍 그러나

input1 = {'hostname' : 'host', 'port' : '22', 'basedn' : 'CN=Users', 'bindusername' : 'admin', 'bindpassword' : 'passwd', 'groupname' : 'CN=Group,CN=Users,DC=tech,DC=com', 'usernameattribute' : 'name'} 

for line in open("/Users/rwettstein/Scripts/Files/ldap-settings.txt", "r"): 
    print line 
    input = line 
    time.sleep(10) 

    params = urllib.urlencode(dict(input)) 

try: 
    f_handler = urlopen('https://hostname/path/file.php', params) 
    except urllib2.HTTPError, error: 
     print "Error Code: %s" % error.code 

, 내가 텍스트 파일에 키/값 쌍 정보를 배치하고 다음 라인으로 파일 라인에서 읽은 텍스트 파일의 데이터를 읽을 경우, 인코딩 사전에 그 다음 HTTP 요청, 나는 다음과 같은 오류 얻을에 넘겨 : 함수는 하나 개의 인수를 반환 읽은 값이 파일에서 전달되는 때문에

ValueError: dictionary update sequence element #0 has length 1; 2 is required 

이 오류가 발생을?

답변

0

사용 ast.literal_eval는 딕셔너리로 ​​각 라인을 구문 분석하는 데 도움이됩니다. 코드 완성 방법을 보여주기 위해 코드를 조금 수정했습니다.

import ast 

input1 = {'hostname' : 'host', 'port' : '22', 'basedn' : 'CN=Users', 'bindusername' : 'admin', 'bindpassword' : 'passwd', 'groupname' : 'CN=Group,CN=Users,DC=tech,DC=com', 'usernameattribute' : 'name'} 

for line in open("/Users/rwettstein/Scripts/Files/ldap-settings.txt", "r"): 
    print line 
    # this assumes each line has a dictionary literal in it. 
    # you can add more robust processing (e.g. skipping empty lines 
    # or lines starting with #) 
    input = ast.literal_eval(line.strip()) 
    time.sleep(10) 

    # this assumes input is a dict or a sequence of key/value tuples. 
    params = urllib.urlencode(input) 

try: 
    f_handler = urlopen('https://hostname/path/file.php', params) 
    except urllib2.HTTPError, error: 
     print "Error Code: %s" % error.code 
1

파일의 각 줄이 하나의 문자열이기 때문입니다. 사전을 업데이트하려면 KEY, VALUE 쌍이 필요합니다. 당신이 당신의 질문에 파일의 샘플 라인을 게시하는 경우에, 나는 필요한 KEYVALUE

편집으로 분할하는 방법을 보여줄 수 : 텍스트 파일

line = "{'hostname' : 'host', 'port' : '22', 'basedn' : 'CN=Users', 'bindusername' : 'admin', 'bindpassword' : 'passwd', 'groupname' : 'CN=Group,CN=Users,DC=tech,DC=com', 'usernameattribute' : 'name'}" 

pairs = line[1:-1].replace("'", '').split(', ') 
pairs = [pair.split(":") for pair in pairs] 
for pair in pairs: 
    pair = [i.strip() for i in pair] 

pass_this_in에서 라인을 분할하는 방법 = DICT (쌍)

희망이

+0

내 텍스트 파일에 다음과 같은 키/값 쌍을 사용 – roland

+0

를이 내 텍스트 파일에서 한 줄입니다 : { '호스트 이름': '호스트', '포트': '22', '기본 DN' CN = 그룹, CN = 사용자, DC = 기술, DC = com ','usernameattribute ':'사용자 이름 ','bindusername ':'admin ','bindpassword ':'passwd ' 이름 '} – roland

+0

내 텍스트 파일의 한 줄입니다. {'hostname ':'host ','port ':'22 ','basedn ':'CN = Users ','bindusername ':'admin ',' CN = 그룹, CN = 사용자, DC = 기술, DC = com ','usernameattribute ':'이름 '} – roland

관련 문제