LINUX.ORG.RU

Python в помощь администратору.


0

4

Чем этот язык может помочь сисадмину? Не программисту! Чем он лучше shell? На питоне, так и так, пол кода будет состоять из команд Линукс. Не ради холливара, а просто разобраться. Понять, нужен он конкретно мне или нет.



Последнее исправление: SexualOpenSourceCode (всего исправлений: 1)
Ответ на: комментарий от anonymous

Аналог на чистом Python в студию, плз!

Я думаю, ты будешь удивлен чистейшим и понятнейшим кодом на питоне.

Кстати, анон, а слабо подправить багу, из-за которой твой скрипт съедает переносы строк?

#!/usr/bin/env python
import gzip, sys

dict_filename = 'mueller-base.dict.dz'
word = sys.argv[1]

word_founded = False
for l in gzip.open(dict_filename):
    l = l.rstrip()

    if not word_founded:
        if l == word:
            word_founded = True
            print l
    else:
        if not l or l[0] == ' ':
            print l
        else:
            break

baverman ★★★
()
Ответ на: комментарий от SexualOpenSourceCode

лицорука.sh

питон - язык общего назначения, поэтому там и есть библиотеки для 3д графики. ты вообще так пишешь, будто в любой программе на питоне нужно все либы импортировать.

и да, почему это профессиональный программист не выберет питон?

memnek
()
Ответ на: комментарий от SexualOpenSourceCode

> Мультипарадигмальный компилируемый язык
а что, язык программирования уже не может быть интерпретируемым? и только с одной парадигмой? по твоей логике даже паскаль - не язык программирования.

худей

memnek
()
Ответ на: комментарий от SexualOpenSourceCode

и да, почему это профессиональный программист не выберет питон?

Потому, что он выберет СИ/СИ++

Это сделает быдлокодер, который считает, что профессиональный программист выберет С или C++.

Begemoth ★★★★★
()
Ответ на: комментарий от anonymous
#!/usr/bin/python

import gzip
import sys

word = sys.argv[1].strip().lower()
start_after = 'See latest version on http://mueller-dict.sourceforge.net/'

print 'Unpacking dict...'
try:
    dicti = gzip.open('mueller-base.dict.dz', 'rb').readlines()
except:
    print 'dict error'
    exit(0)
print 'Ok. searching for word '+word

lineno = 0
started = False
for i in dicti:
    lineno += 1
    if started:
        if i.strip() != '' and i[0] != ' ':
            curw = i.strip().lower()
            #print unicode(lineno)+':current word: '+curw.decode('utf-8')
            if curw == word:
                wordline = lineno+1
                print 'line' + unicode(wordline)

                while dicti[wordline][0] == ' ' or dicti[wordline][0].strip() == '':
                    print dicti[wordline].rstrip()
                    wordline += 1

                break
    if not started and i.find(start_after) != -1 :
        print 'started at ' + unicode(lineno) + ' line'
        started = True

AGUtilities ★★★
()
Ответ на: комментарий от memnek

а что, язык программирования уже не может быть интерпретируемым?

А язык не бывает интерпретируемым или компилируемым, это свойство реализации.

Begemoth ★★★★★
()
Ответ на: комментарий от SexualOpenSourceCode

отучился уже. а ты видимо её прогуливал. ЯП - язык, с помощью которого можно создавать программы. на баше и питоне нельзя создать программы?

memnek
()
Ответ на: комментарий от memnek

Не отвлекай его. Он пишет сверкающий баш-скрипт о пятиста строках.

baverman ★★★
()
Ответ на: комментарий от baverman

> Я думаю, ты будешь удивлен чистейшим и понятнейшим кодом на питоне.

:)

Кстати, анон, а слабо подправить багу, из-за которой твой скрипт съедает переносы строк?

А нафига мне во всплывающем окошке лишние переводы строк? Только место занимают. Это не бага, это - специальная фича. Реализуй съедание ненужных переводов строк в своём скрипте. Они там рельно не нужны.

Кстати, а тебе слабо подправить багу, из-за которой твой скрипт находит «head», но не находит «Head» или «Table», т.е. регистрозависим?

..и где ограничение на кол-во выводимых строк? У меня экран не резиновый.

anonymous
()
Ответ на: комментарий от anonymous

Это не бага, это - специальная фича.

Не силён в sed/awk, но насколько понял, на этой фиче держится вся реализация. Поэтому, будь добр яви миру \n, развей мои сомнения в твоей подготовке. Тогда и мои тривиальные правки будут незамедлительно представлены.

baverman ★★★
()
Ответ на: комментарий от anonymous

%s/во всплывающем окошке/во всплывающей подсказке/g

anonymous
()
Ответ на: комментарий от SexualOpenSourceCode

на баше и питоне нельзя создать программы?

Это называется скрипт/сценарий.

по моему, gajim или openshot уже тяжело назвать просто скриптом/сценарием...

AGUtilities ★★★
()
Ответ на: комментарий от SexualOpenSourceCode

Это называется скрипт/сценарий.

А что такое тогда программа?

baverman ★★★
()
Ответ на: комментарий от baverman

> Не силён в sed/awk, но насколько понял, на этой фиче держится вся реализация. Поэтому, будь добр яви миру \n, развей мои сомнения в твоей подготовке. Тогда и мои тривиальные правки будут незамедлительно представлены.

Ты меня разочаровал.

#!/bin/bash
# 
WORD=`echo $1 | tr 'A-Z' 'a-z'`;
LINES=30;  
DICTIONARY="$HOME/dict/mueller-base.dict.dz"; 
# 
zcat $DICTIONARY | \
  sed -rn -e 's/^[^ ]/\n\t&/g;p' | \
  awk 'BEGIN { RS = "\t"; FS = "\n\n" } $1 ~ /^'$WORD'$/ { print $0 }' | \
  head -n $LINES  
#

Я убрал одну специально предназначенную для этого строку (' sed -e '/^$/d' | \').

Давай сюда свои гениальные правки.

anonymous
()
Ответ на: комментарий от SexualOpenSourceCode

и чем же он отличается от программы? почему скрипт не может быть программой?

Программа — представленная в объективной форме совокупность данных и команд, предназначенных для функционирования ЭВМ и других компьютерных устройств с целью получения определенного результата, включая подготовительные материалы, полученные в ходе разработки программы для ЭВМ, и порождаемые ею аудиовизуальные отображения.

— ст. 1261 «Программы для ЭВМ» ГК РФ

Последовательность команд? да. Получаем определённый результат? да. под определение подходит, значит это называется программа. а как её запускать - интерпретировать или компилировать - зависит только от реализации. питон можно компилировать, а для С есть интерпретаторы.

Выходит в школе недоучился ты

memnek
()
Ответ на: комментарий от SexualOpenSourceCode

> Потому, что он выберет СИ/СИ++
громкий хохот в зале.

он выберет то, что удобнее под конкретную задачу. а это далеко не всегда с/с++

memnek
()
Ответ на: комментарий от memnek

> он выберет то, что удобнее под конкретную задачу. а это далеко не всегда с/с++
Ждем Crysis 3 на Питоне! Решено - продолжаю осваивание этого замечательного языка ПРОГРАММИРОВАНИЯ!

SexualOpenSourceCode
() автор топика
Ответ на: комментарий от uzbl

> zgrep -aA60 '^head$' mueller-dict-3.1.1.tar.gz |sed '/^$/d'

Красиво. Но много лишнего:

$ zgrep -aA60 '^discovery$' mueller-dict-3.1.1.tar.gz |sed '/^$/d'

anonymous
()
Ответ на: комментарий от anonymous
#zgrep -aA60 '^discovery$' mueller-dict-3.1.1.tar.gz |sed '/^$/d' 
discovery
  [dIs'kAvэrI] _n.
    1) открытие
    2) раскрытие, обнаружение
    3) развёртывание (сюжета)
    *) Discovery Day день открытия Америки (12 октября)
_____
discredit
  [dIs'kredIt]
    1. _n.
      1) дискредитация; to bring discredit on oneself дискредитировать
      себя; such behaviour is a discredit to him такое поведение позорит,
      дискредитирует его; to bring into discredit навлечь дурную славу,
      дискредитировать
      2) недоверие; to throw discredit upon smth. подвергнуть что-л.
      сомнению
      3) _фин. лишение коммерческого кредита
    2. _v.
      1) дискредитировать; позорить; his behaviour discredits him with the
      public его поведение дискредитирует его в глазах общества
      2) не доверять; the report is discredited этому сообщению не верят
_____
discreditable
  [dIs'kredItэbl] _a. дискредитирующий, позорный
_____
discreet
  [dIs'kri:t] _a.
    1) осторожный, осмотрительный, благоразумный
    2) сдержанный, неболтливый
_____
discrepancy
  [dIs'krepэnsI] _n.
    1) различие, несходство
    2) разногласие, противоречие; расхождение
_____
discrepant
AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

На Haskell и короче, и читаемей:

import Data.Char (toLower)
import Data.List (isPrefixOf)
import qualified Data.ByteString.Lazy as ByteString
import qualified Data.ByteString.Lazy.UTF8 as UTF8
import qualified Codec.Compression.GZip as GZip
import System.Environment (getArgs)

main = do word <- getArgs >>= return . map toLower . head
          ByteString.readFile "mueller-base.dict.dz" 
            >>= putStr . unlines . takeWhile ((" " `isPrefixOf`) `disj` null) . tail . dropWhile (/= word) 
            . tail . dropWhile (/= "See latest version on http://mueller-dict.sourceforge.net/") . lines . UTF8.toString . GZip.decompress
  where disj f g x = f x || g x
Begemoth ★★★★★
()
Ответ на: комментарий от anonymous

Давай сюда свои скромные правки.

#!/usr/bin/env python
import gzip, sys, itertools

dict_filename = 'mueller-base.dict.dz'
word = sys.argv[1].lower()

def get_entry(lines, word):
    word_founded = False
    for l in lines:
        l = l.rstrip()

        if not word_founded:
            if l == word:
                word_founded = True
                yield l
        else:
            if l:
                if l[0] == ' ':
                    yield l
                else:
                    break

print '\n'.join(itertools.islice(
    get_entry(gzip.open(dict_filename), word),
    30))

Продолжим? Там есть волшебные индексные файлы, будешь пытаться запилить на баше поиск через них?

baverman ★★★
()
Ответ на: комментарий от AGUtilities

если модуль, то сам скомпилится, если нет то через модуль comile

AGUtilities ★★★
()
Ответ на: комментарий от AGUtilities

Кстати, реально очень много строк. Логика на первый взгляд не совсем очевидна. На bash, sed, awk гораздо короче. И, как не смешно, понятнее. :)

anonymous
()
Ответ на: комментарий от anonymous

только выдаёт ещё и ненужные ответы или если описание длинное, то выдаёт только часть

AGUtilities ★★★
()
Ответ на: комментарий от baverman

В общем, зачёт: полностью оно. Но, по сравнению с bash + sed + awk + head, твоё решение в полтора раза медленнее и раза в два сложнее.

> Продолжим? Там есть волшебные индексные файлы, будешь пытаться запилить на баше поиск через них?

Не-не-не. Меня мои 1.5 сек на Core2 и 4 сек на Atom вполне устраивают. :)

anonymous
()

Мы отошли от темы обсуждения. Чем инструмент под названием питон лучше для сисОдмина?

SexualOpenSourceCode
() автор топика
Ответ на: комментарий от SexualOpenSourceCode

это называется компиляция в байткод. опять ты в лужу метанируешь. иди и учи в чём разница между компиляцией (в байт-код, в машинный, etc) и интерпретацией. Java вон тоже в байт-код компилируется

memnek
()
Ответ на: комментарий от SexualOpenSourceCode

байткод это не компиляция!

Только в твоём сознании.

Begemoth ★★★★★
()
Ответ на: комментарий от SexualOpenSourceCode

И, кстати, 100% программ интерпретируются.

Begemoth ★★★★★
()
Ответ на: комментарий от SexualOpenSourceCode

в твоём понимании, наверное, если сделают процессор который нативно будет поддерживать работу с байткодом, это будет компиляция? :D

AGUtilities ★★★
()
Ответ на: комментарий от SexualOpenSourceCode

Ты бы ссылки привёл на литературу, в которой бы давались определения близкие к твоим, грамотей.

Begemoth ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.