Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Помогите переписать Bash-скрипт на Python  (Прочитано 2164 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн buddser

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Случайно в нете нашел скрипт который мне нужно написать на питоне...
Но к сожалению он на баше... в баше к сожалению не очень хорошо разбираюсь... как в общем и в питоне...
Помогите переписать скриптна питон пожалуйста.
Или хотя бы расскажите как он работает этот баш скрипт... чтобы я смог найти аналогичные функции в питоне.
Спасибо за любую помощь!

Скрипт номер раз

Цитировать
touch container.dmc
shred -n1 -s50M container.dmc
losetup /dev/loop0 ./container.dmc
cryptsetup -y create X /dev/loop0
mkfs /dev/mapper/X

Скрипт номер два

Цитировать
#!/bin/bash

LABEL=X;
LOOPD=/dev/loop0;
MNTPT=/media/Disk_$LABEL;
CCNTR=/media/FAFE-47E0/container.dmc;

start() {
echo ' ';
echo '----- Mount CryptoContainer ['$CCNTR'] ---------------------';
/sbin/losetup $LOOPD $CCNTR;
/sbin/cryptsetup create $LABEL $LOOPD;
mkdir $MNTPT;
mount -t ext2 /dev/mapper/$LABEL $MNTPT;
   MLINE=`mount | grep $MNTPT`;
   if [ -n "$MLINE" ]; then
           echo "Label :: [$LABEL]; $CCNTR --> $MNTPT; [on $LOOPD]";
           echo '----- Mount CryptoContainer Complete ! ---------';
   else   echo '----- ERROR - Bad password -----------------';
           stop;
   fi
echo ' ';
}

stop() {
echo ' ';
echo '----- Unmount CryptoContainer ['$CCNTR'] --------------------';
sync;
umount $MNTPT;
/sbin/cryptsetup remove $LABEL;
/sbin/losetup -d $LOOPD;
   DLINE=`ls -A $MNTPT`;
   if [ -n "$DLINE" ];
      then echo '----- CryptoContainer cannot be unmouted !!! ------';
   else
      rm -rf --one-file-system $MNTPT;
      echo '----- Unmount CryptoContainer Complete ! ---------';
   fi
echo ' ';
}

case "$1" in
start)
   start;;
stop)
   stop;;
*)
   MLINE=`mount | grep $MNTPT`;
   if [ -n "$MLINE" ]; then
       stop;
   else
       stop;
       clear;
       start;
   fi
esac

exit 0;

Пользователь решил продолжить мысль 20 Февраля 2010, 10:37:03:
то что сам нахожу буду по тихоньку тоже писать...

Эта строка заменяет
Цитировать
touch
изпервого скрипта
Цитировать
import os

if not os.path.exists('container.dmc'):
    open('container.dmc', 'w').close()

Пользователь решил продолжить мысль 20 Февраля 2010, 12:44:13:
Вот такая строка на питоне:
Цитировать
os.system("shred -n1 -s50M container.dmc")
Заменит вот такую на баше:
Цитировать
shred -n1 -s50M container.dmc

Сразу оговорюсь я хотел бы использовать функции питона... а не работать через os.system...
Но пока, за неимением лучшего, так.

Пользователь решил продолжить мысль 20 Февраля 2010, 18:47:52:
Цитировать
open('container.dmc','wb').write( ''.join([chr(randrange(0,256)) for x in xrange(50000000)]) )

Вот эта строчка забивает контейнер случайной последовательностью, файл получается размером 50 мб
« Последнее редактирование: 20 Февраля 2010, 20:48:52 от buddser »

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите переписать Bash-скрипт на Python
« Ответ #1 : 21 Февраля 2010, 13:18:28 »
shred -n1 -s50M container.dmc
Сразу оговорюсь я хотел бы использовать функции питона... а не работать через os.system...
Но пока, за неимением лучшего, так.

Первый скрипт - это всего лишь последовательность вызовов команд операционной системы.
man команда расскажет, что она делает
В частности, shred - delete a file securely, first overwriting it to hide its contents (http://linux.about.com/library/cmd/blcmdl1_shred.htm)
Я порылся в гугле по словам "python delete file securely shred" - какие-то ссылки он мне выдал, но копаться в них в поисках конкретного решения недосуг :)

Второй скрипт выполняет одну из двух функций, в зависимости от аргументов (разбирается только первый параметр $1).
Там сначала определены две подпрограммы start и stop. Что они делают, они сами пишут посредством команды echo - монтируют и демонтируют какой-то криптоконтейнер. Они также являются простыми последовательностями вызовов, с примитивным ветвлением в конце.
В конце файла стоит оператор case, анализирующий первый аргумент командной строки ($1) и вызывающий либо функцию start, либо stop, либо выполняющий перезапуск (stop; clear; start)
clear - очистка экрана.
« Последнее редактирование: 21 Февраля 2010, 13:24:56 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.019 секунд. Запросов: 22.