Перевод bash на python; команда «dd» «iflag=skip_bytes» как можно преобразовать?

#python #bash

Вопрос:

Я пытаюсь преобразовать скрипт bash в python, и у меня есть фрагмент кода, который я хочу понять лучше. Сценарий:

 dd < "$file" skip=$start count=$((end - start)) iflag=skip_bytes 2> /dev/null |
        (
            if [ -n "$dir" ]; then
                mkdir -p -- "$dir/$subdir"
                cd -- "$dir/$subdir"
            fi
            cpio -i "$@"
        )
 

Насколько я понимаю, я читаю из файла, который я сбрасываю, по байтам «$start» и иду дальше count .
Поэтому я предполагаю, что смогу сделать это с seek помощью .

Как мне перевести iflag=skip_bytes на python ?

Комментарии:

1. «Как мне перевести iflag=skip_bytes на python ?» Вы уже сделали это, если интерпретируете skip как байты. Иначе это были бы блоки.

2. Возможно, вы захотите добавить соответствующую справочную/справочную информацию для своей платформы. iflag dd Например , для BSD нет параметра.

Ответ №1:

От https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html#dd-invocation

‘пропустить=n’

Пропустите n байтовых блоков ‘ibs’во входном файле перед копированием. Если указано «iflag=skip_bytes», n интерпретируется как количество байтов, а не количество блоков.

Итак, если бы у вас не было iflag=skip_bytes в вашем сценарии bash, вам пришлось бы умножить $start на размер блока, прежде чем искать. Но поскольку он iflag=skip_bytes есть, умножение не требуется, и вам нужно искать только по $start байтам.

Комментарии:

1. То же самое касается count тех, которые обычно учитываются в блоках, но используют байты, если iflag=skip_bytes таковые имеются.