LINUX.ORG.RU

Строка в переменную python

 , ,


0

2

Здравствуйте. Завис на такой тривиальной проблеме:

trgt = c.entries[0].entry_to_json().split('\n')[2].split(':')[1] 
print (trgt) 
»"CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com" 
c.modify(trgt, {'mail': [(MODIFY_REPLACE, ['box@example.com'])]}) 
# Не работает 

# Если указать строку руками
c.modify("CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com", {'mail': [(MODIFY_REPLACE, ['box@example.com'])]}) 
# Работает
Буду благодарен за любую наводку.

Ответ на: комментарий от anonymous

пробовал, не работает. Даже колхозил вместе с одиночными ковычками в другую переменную

mrPresedent
() автор топика

человек, не желающий сформулировать вопрос не достоин ответа. я не понял ничего из твоего кода и в чем твоя проблема.

anonymous
()
c.modify(trgt, {'mail': [(MODIFY_REPLACE, ['box@example.com'])]}) 
c.modify("CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com", {'mail': [(MODIFY_REPLACE, ['box@example.com'])]}) 

Как минимум у тебя это не эквивалентный код. У тебя в trgt хранится строка с кавычками. А в примере где ты пытаешься передать строку напрямую, ты передаешь ее без кавычек.

То есть во втором примере у тебя должно быть примерно так

c.modify("\"CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com\"", {'mail': [(MODIFY_REPLACE, ['box@example.com'])]}) 

В остальном плюсую анонима сверху. Откуда кто знает, что у тебя там за функция, что хранится в trgt по факту, и что принимает твой c.modify. Где сигнатура? Где type(trgt)? Научись задавать вопросы.

anonymous
()
Ответ на: комментарий от anonymous

проблема в том, что код отрабатывает как нужно, если указать в c.modify строку userDN (в данном случае: «CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com»), но не отрабатывает, если занести эту строку в переменную и использовать в c.modify уже переменную. Скрипт успешно завершается, пользовательский аттрибут в ldap остается неотредактированным.

mrPresedent
() автор топика
Ответ на: комментарий от mrPresedent

Ты не понял. У тебя

trgt = c.entries[0].entry_to_json().split('\n')[2].split(':')[1] 
trgt2 = "CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com"

print(trgt[0] == trgt2[0]) //false
print(trgt[-1] == trgt2[-1]) //false
anonymous
()
Ответ на: комментарий от mrPresedent

Питон тут не при чем. У тебя c.modify ожидает получить строку вида

CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com

А ты ему передаешь trgt, в котором у тебя лежит

«CN=\u0418\u043b\u044c\u043d\u0443\u0440,CN=Users,DC=example,DC=com»

другая строка, на два символа длинее, и эти символы кавычки потому что ты через жопу парсишь жсон.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо за наводку.
Убрал ковычки из вывода entries, оба print выдают True, но:
c.modify(str(trgt) - не работает
c.modify(str(trgt2) - работает

mrPresedent
() автор топика
Ответ на: комментарий от anonymous

Вот теперь дошло. Споткнулся о кодировку, т.к. «через жопу парсил жсон»

mrPresedent
() автор топика
Ответ на: комментарий от anonymous

человек, не желающий сформулировать вопрос не достоин ответа. я не понял ничего из твоего кода и в чем твоя проблема.

возможно непонятность кода - скрытый вопрос и просьба помочь писать нормально, а ты сразу «не достоин»

rust_afari
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.