Я пытаюсь преобразовать этот кусок кода PHP в Python. Я понял, как это сделать crc32b
хэш, но я застрял на proc_open()
, Не могли бы вы помочь мне?
Что я хочу, чтобы получить значение $pipeOutput
в коде Python.
PHP
$hashedData = strrev(hash("crc32b", $data, true)) . $data;
$xzBinary = trim(`which xz`);
$xzProcess = proc_open("$xzBinary '--format=raw' '--lzma1=lc=3,lp=0,pb=2,dict=128KiB' '-c' '-'", [
0 => [
"pipe",
"r"],
1 => [
"pipe",
"w"]
], $xzProcessPipes);
fwrite($xzProcessPipes[0], $hashedData);
fclose($xzProcessPipes[0]);
$pipeOutput = stream_get_contents($xzProcessPipes[1]);
fclose($xzProcessPipes[1]);
proc_close($xzProcess);
питон
import zlib
from subprocess import Popen
def crc32b(x):
h = zlib.crc32(x)
x='%08X' % (h & 0xffffffff,)
return x.lower()
data = 'some_data'
hashed_data = crc32b(data)[::-1]+data #strrev(hash("crc32b", $data, true)) . $data;
xz_binary = '//usr/bin/xz'
r = Popen([xz_binary, "--format=raw",'--lzma1=lc=3,lp=0,pb=2,dict=128KiB','-c','-'])
РЕДАКТИРОВАТЬ
hashed_data = crc32b(data)[::-1]+data
xz_binary = '//usr/bin/xz'
p = Popen([xz_binary, "--format=raw",'--lzma1=lc=3,lp=0,pb=2,dict=128KiB','-c','-'],stdin=PIPE, stdout=PIPE,stderr=PIPE)
p.communicate()
stdout_file = p.stdout
stdin_file = p.stdin
stdin_file.write(hashed_data)
Говорит, что stdin_file
закрыто, но я не уверен, что это то, что я должен делать
ValueError: I/O operation on closed file
Задача ещё не решена.
Других решений пока нет …