Я рекомендую, если вы хотите, чтобы получить это от отдельного процесса, следовать Python передовой практики и использовать subprocess
модуль. check_output
даст вам stdout
процесса, который стартовал. shlex
может правильно разобрать команду оболочки для вас, не делать это вручную:
>>> import subprocess
>>> import shlex
>>> shlex.split('openssl rand -hex 10')
['openssl', 'rand', '-hex', '10']
>>> x = subprocess.check_output(shlex.split('openssl rand -hex 10'))
>>> x
'42bfeea1f5a1d9b96e4b\n'
>>> x = x.strip()
>>> x
'42bfeea1f5a1d9b96e4b'
>>> int(x, 16)
315216711282402877075019L
Чтобы начать с правильным шестнадцатеричной буквальным, который начинается с 0x
, которого Python переводит на долгий INT:
>>> 0xb0f4735701d6325fd072
835645817652699503513714L
Передайте его hex
:
>>> hex(0xb0f4735701d6325fd072)
'0xb0f4735701d6325fd072L'
(Вы можете лишить L
от строка с hex(0xb0f4735701d6325fd072).strip('L')
)
Чтобы преобразовать обратно в длинный из строкового представления, вам нужно передать его int
(также long
в Python 2) вместе с соответствующим основанием (16 в данном случае):
>>> int('0xb0f4735701d6325fd072', 16)
835645817652699503513714L
'b0f4735701d6325fd072' не является допустимым идентификатором в Python. У вас есть '0xb0f4735701d6325fd072'? –
На самом деле я делал как x = os.system (openssl rand -hex 10) и сохранял его в файле со строкой конкатенации, но он возвращал 0. – user2858815