2015-12-09 5 views
0

Im чтение файла/Proc // командная_строка через:Преобразование x00 с пространством

pfile = '/proc/%s/cmdline' % pid 
if os.path.isfile(pfile): 
    fh = open(pfile, 'r') 
    pname = repr(fh.read()) 
    fh.close() 

print pname 

ВЫВОД:

'myexe\x00arg\x00arg2' 

если я удалить магнезии, нет пространства между словами

'myexeargarg2' 

Так я изменил его на

' '.join(fh.read().split('\x00')) 

Тогда я получил:

'myexe arg arg2' 

Просто интересно, если есть и другие способы, чтобы преобразовать \ x00 в пространстве?

+3

'str.replace ('\ x00'. '')'? –

+0

Возможно, что-то [здесь] (http://code.activestate.com/recipes/510399-byte-to-hex-and-hex-to-byte-string-conversion/) поможет –

+3

'str.replace ('\ x00 ',' ') '(у ответа @ RNar есть опечатка) –

ответ

1

Вот краткий пример, который поможет вам ответить на ваш вопрос.

content = b'cmd\x00arg1\x00arg2\x00' 
print(content.replace("\x00", " ")) 

Он заменит места как объяснение here.

3

Если вы посмотрите таблицу ASCII, вы увидите, что \x00 является символом NULL. Когда вы печатаете что-то, на нем вызывается str, который пытается создать версию данных и непечатаемые символы для печати. Вы можете увидеть, какие символы печатаемые глядя на string.printable:

import string 
if '\x00' in string.printable: 
    print "printable" 
else: 
    print "unprintable" 

Когда вы run this вы увидите это выводит «непечатные».

Однако repr пытается сгенерировать что-то, что может воссоздать исходные данные, так что \x00 должен быть видимым там, потому что это необходимо для воссоздания исходных данных.

Если вы хотите получить пробелы, где бы вы ни находились, все, что вам нужно сделать, это replace пробел с fh.replace('\x00', ' ').

Смежные вопросы