Найти - Пользователи
Полная версия: Python: передача экранирующего символа ( backslash ) из str в list
Начало » Python для новичков » Python: передача экранирующего символа ( backslash ) из str в list
1
soln
Здравствуйте натолкнулся на следующее
In [39]: hexx = r'\x80\x20\x00\x00'

In [40]: print hexx
\x80\x20\x00\x00

In [41]: listhex = [hexx]

In [42]: print listhex
['\\x80\\x20\\x00\\x00']

In [43]: print listhex[0]
\x80\x20\x00\x00

In [44]: print (listhex[0], listhex[0])
('\\x80\\x20\\x00\\x00', '\\x80\\x20\\x00\\x00')
Вопросы
Чем обусловлено такое поведение и где про это можно почитать?
Как мне быть если внутри списка требуется передать одинарный ‘\’

пример
In [45]: _edit = netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.4.3.1.4', 1107, listhex[0] , 'octetstr')

In [46]: netsnmp.snmpset(_edit, Version = 2, DestHost=ip, Community=XXXXXXXXXXXXX)
Out[46]: 0
Вернулось 0 - не выполнено.
А теперь вместо переменной используем литерал:

 
In [47]: _edit = netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.4.3.1.4', 1107, '\x80\x20\x00\x00' , 'octetstr')

In [48]: netsnmp.snmpset(_edit, Version = 2, DestHost=ip, Community=XXXXXXXXXXXXXXXX)
Out[48]: 1
s0rg
http://docs.python.org/reference/lexical_analysis.html#strings

String literals may optionally be prefixed with a letter ‘r’ or ‘R’; such strings are called raw strings and use different rules for interpreting backslash escape sequences.

Если и так не понятно то проверьте вариант с
_edit = netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.4.3.1.4', 1107, r'\x80\x20\x00\x00' , 'octetstr')
для чистоты эксперемента, так сказать.
soln
s0rg
http://docs.python.org/reference/lexical_analysis.html#strings
для чистоты эксперемента, так сказать.
Попробовал не работает - возвращает ноль.
Спасибо за ссылку прочту напишу.
py.user.next
soln
Чем обусловлено такое поведение и где про это можно почитать?
нужно почитать по встроенным типам в питоне
>>> s = '\\ \\ \\'
>>> [s]
['\\ \\ \\']
>>> len([s])
1
>>> list(s)
['\\', ' ', '\\', ' ', '\\']
>>> len(list(s))
5
>>> lst = list(s)
>>> lst
['\\', ' ', '\\', ' ', '\\']
>>> lst[0]
'\\'
>>>
soln
s0rg
http://docs.python.org/reference/lexical_analysis.html#strings

String literals may optionally be prefixed with a letter ‘r’ or ‘R’; such strings are called raw strings and use different rules for interpreting backslash escape sequences.
Извиняюсь, что пропал. Прочел, понял. Спасибо.

И офтоп.

По игрался я еще в netsnmp и прихожу к мысли не использовать данный модуль так - как в месте передачи hex string snmpset`у он ведет себя странно и человеческих эксепшенов не возвращает.

Пример
 In [231]: _edit = netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.4.3.1.4', 1107)
In [232]: hexmask = netsnmp.snmpget(_edit, Version = 2, DestHost='ip', Community="comunitiname")

Тут я получил hex маску от netsnmp.snmpget через ipyton


In [233]: print hexmask
('\x80`\x00\x00',)

а тут маску которую он сам мне отдал отдаю netsnmp.snmpset

In [234]:  _edit = netsnmp.Varbind('.1.3.6.1.2.1.17.7.1.4.3.1.4', 1107, hexmask , 'octetstr')
In [235]: netsnmp.snmpset(_edit, Version = 2, DestHost='ip', Community="comunitiname")
Out[235]: 0
Упс НОЛЬ!!!! То-есть не выполнено. Это простите, как?

ну и в оф. документации прекрасное.

KNOWN BUGS:

Too many to mention at this point
в прочем может я просто плохо танцую, и тапки тут не причем.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB