Pull to refresh

Comments 113

Только вот подобный способ будет работать только при наличии bash или подобного ему интерпретатора (ну или потребует прописания алиасов).

Это вы о чем? В документации написано:

    On Unix, with shell=False (default): In this case, the Popen class uses
    os.execvp() to execute the child program. args should normally be a sequence. 
    A string will be treated as a sequence with the string as the only item
    (the program to execute).
прошу прощения, забыл про шелл. Просто писал по памяти первое, что пришло в линуксоидскую голову :)
По поводу записи файлов уже моднее использовать with:
with open("/home/user/testfile.txt", "w") as myfile:
    print>>myfile, "I want to drink some beer with Guido"

На целую строчку короче и файл сам закрывается. :) Правда работает только начиная с 2.6.
Отлично, спасибо! На это я и рассчитывал, признаться — узнать из комментариев еще что-нибудь интересное и полезное. Да, вот такой я корыстный :)
Кстати, на счёт версии обманул немного. В 2.5 его можно было взять из __future__:
>> from __future__ import with_statement
Интересно, а есть простые приемы работы с пайпами?
все реализуется через тот же subprocess, например, ввод пароля в скрипте я делал так:
proc = Popen(command, shell=True, cwd=self.fullpath, stdin=PIPE, stdout=PIPE)
proc.communicate(mypass)
Так я умею. Интересно бы было что-нибудь как в Perl:

#!/usr/bin/perl
while (<>) {
 print;
}

Вот самое простое, что получилось. Уже неплохо.

#! /usr/bin/python
import sys
while True:
    l = sys.stdin.readline()
    print l,
    if not l:
        break

Можно добавить сахару, написав генератор

import sys
 
# пишем генератор
def lines(file):
    while 1:
        line=file.readline()
        if line:
            yield line
        else:
            break
 
# пользуемся
for line in lines(sys.stdin):
    print ">", line
Это, кстати, то что надо и «питоник», я думал, что-нибудь такое в стандартной библиотеке есть.
xreadlines есть, зачем генератор?
import sys
for line in sys.stdin:
    print l
# а почему не так?
В таком варианте почему-то получается не строго построчно (хотя для обработки пайпа я думаю пойдет). Попробуйте запустить в консоли и попечатать.
У меня вполне построчно и вполне строго.
Разве что я не печатаю, а файл на ввод подаю. Думаю, для клавиатурного ввода лучше использовать какой-нибудь readline.
Для файла на ввод можно ваш вариант, для клавиатуры readline)

А если у нас сокет или двухсторонний пайп и мы ждем с другой стороны ровно одну строку, но без EOF (команду, запрос, ответ), то буферизация будет сильно мешать.
Двусторонний пайп — это что-то из мира MS Windows, в *nix пайпы односторонние :-)

Ну а сокеты — это всегда отдельный мир, и наоборот, буферизация там обязательна, т.к. данные могут прийти двумя кусками по полстроки. Мне удобство фреймворка twisted в этом плане очень нравится.
Точнее, в Linux пайпы односторонние, а в Solaris например двух сторонние (в BSD семействе тоже). Другок дело что по стандарту они не обязаны такими быть (но могут). Да и ничто не мешает открыть в Линуксе два пайпа.

Данные могут приходить хоть по одному байту, readline будет ждать полную строку.
Погуглил — пишут, что в *BSD пайпы через unix-сокеты реализованы и, соответственно, поэтому они и двусторонние. Спасибо, не знал.
Как в этом варианте отличить пустую строку от конца ввода?
Нормально работает, попробуйте, пустую строку (Enter) печатает, по концу файла (Ctrl + d) выходит.
Для открывания файлов в нужной кодировке можно пользоваться модулем codecs:

import codecs
fp = codecs.open("/path/to/file", «w», «utf-8»)
Скажите пожалуйста, какие жизненные обстоятельства заставили Вас стырить картинку с Дримса, а не потратить 1$ на её покупку? Вам не приходило в голову, что эта картинка там лежит для того, чтобы её покупали, в том числе и для использования в подобных статьях?

Прошу прощения, я искал картинку через гугловый поиск. Если она нарушает чьи-то права — естественно, я заменю ее на какую-нибудь другую.
Это картинка из микростокового фотобанка Дримстайм: dreamstime.com/stock-image-funny-snake-cartoon--image3626431 (это видно по водяному знаку). Микростоки это специальные сайты, которые продают картинки очень дёшево — чтобы любой мог их купить для своих нужд, и в то же время помногу — чтобы авторы картинок могли на этом что-то заработать.

У этой картинки, как следует из ссылки, есть конкретный автор — Елена Демьянюк (http://www.dreamstime.com/Yelenademyanyuk_info). Она её специально нарисовала и поместила в фотобанк, именно чтобы её покупали…

А замените Вы тоже на «что-то из гугла»? Но ведь у новой картинки тоже будет автор…
Конечно. Кстати, картинка, из-за которой весь сыр-бор, была найдена вовсе не на фотостоке, а в каком-то совершенно левом блоге. Так что кто нарушил права — еще вопрос. Если вам так будет проще (например, если вы сами всегда покупаете картинки для своих статей и моя самодеятельность вас коробит) — я готов вообще ее удалить.
не говоря уже о том, что на картинках для того и есть водяные знаки, чтобы ее могли купить желающие. Вот если бы я выложил полноразмерный оригинал — это было бы неправомерно. А так — я рад, что устроил Елене рекламу, картинка и правда была вполне симпатичная :)
Не изворачивайтесь. Интересная у Вас «реклама» — без имени автора, без ссылок, без ничего…

Водяные знаки — это _защита_ от подобного использования. Другое дело, что Вы настолько уверены, что «всё ничьё», что Вам и на водяные знаки наплевать.

И я не думаю, что Елена просила Вас об этой «рекламе». Поскольку она разместила эту картинку для продажи, и картинка эта вполне покупается (нормальными людьми), то бесплатная «реклама» ей нафиг не сдалась. Вот когда Вы сами что-нибудь нарисуете — тогда и решайте, можно это использовать на халяву или нельзя. А за других решать не надо.
Имейте совесть — уважайте чужой труд.
Я и уважаю. Картинку убрал по первому же требованию. Вроде как, больше нечего обсуждать.
Я думаю, что где бы Вы не нашли эту картинку, Вы по крайней мере одну вещь знаете про неё точно — она не Вашего авторства. А значит, прав на её использования у Вас нет. Всё ведь просто: не твоё — не трогай.

Нет, я понимаю, что интернет Вы воспринимаете как большую свалку, где всё ничьё и всё общее. Но вот выше я специально показал, что Вы стырили картинку не у какой-нибудь мегакорпорации, а у вполне рядового художника-дизайнера. И таких картинок в сети абсолютное большинство… Неужели не очевидно, что воровать у своих — как минимум некрасиво?

Вот Вы сейчас оторвали откуда-то ещё какую-то змею с куском надписи в углу… Опять всё вокруг ничьё, да?
Зачем же так строго? Есть картинки и исходники под свободными лицензиями. Просто нужно обращать на это внимание.
Повторяю, никакого воровства не было и нет — запрещается лишь использовать оригинал картинки в публичных проектах без ссылки на правообладателя. Или давайте писать под каждой картинкой копирайт и спрашивать разрешения у «того парня на тарзанке на другой стороне реки»? Тем более, что этот образец я не пытаюсь продать и не выдаю за свой. Если следовать вашим словам, каждый кадр и цитату из фильма, каждый квадратик надо снабжать копирайтом и ссылкой на сайт производителя? А внизу писать «Данный текст набран на клавиатуре ноутбука Samsung»? Предлагаю замять вопрос.
> Повторяю, никакого воровства не было и нет — запрещается лишь использовать оригинал картинки в публичных проектах без ссылки на правообладателя.

Это Вы сами только что придумали. Ни в одном законе об АП ни в какой стране ничего подобного нет.

> Или давайте писать под каждой картинкой копирайт и спрашивать разрешения у «того парня на тарзанке на другой стороне реки»?

Нет, давайте либо честно покупать картинки, либо использовать свои, либо распространяемые по свободной лицензии — целых три варианта, и все честные. А не шариться по помойкам.

> Тем более, что этот образец я не пытаюсь продать и не выдаю за свой.

Это никого не интересует. Вы использовали картинку без разрешения автора. Это незаконно. За данный конкретный случай Вас, конечно, никто в тюрьму не посадит, и вообще не заметит — но по крайней мере сейчас Вы знаете, что поступили плохо.

> Предлагаю замять вопрос.

Да ради бога. Главное, чтобы какой-то осадок остался…

И ещё… _по умолчанию_ считается, что только автор решает, как могут распоряжаться его картинкой. Это прописано во всех законах, и это вполне естественное правило хотя бы с точки зрения вежливости. Если автор ЯВНО разрешил использовать свою картинку — например, разместив её под (cc)-лицензией — то ради бога. Иначе — нельзя. И если Вы не знаете мнения автора — то тоже нельзя. Как вот с этой Вашей второй змеёй.

Всё ведь очень просто.
Отлично :) спасибо, что милостиво меня просветили. Поставил логотип питона. Инцидент исчерпан.
UFO just landed and posted this here
UFO just landed and posted this here
Есть еще такое понятие как Fair use) Шарахаться от всего в интернете, на чем не написано большими буквами «РАЗРЕШЕНО» тоже глупо.

Но если автор хочет продавать, то конечно нужно убрать.

Просто догадаться о том, что картинка с сайта-магазина не так просто, ибо все эти водяные знаки не запомнишь (особенно те которые не содержат вебадреса и/или имени и/или знака копирайта)
Я поражен.
Поражен тем как такие нудные и муторные люди как вы живут, а не умирают сразу прирождении… :(

зы. И очень не нравится как вы заняли hiero.ru под какую-то фигню, которой место под каким-то неудобоваримым названием вместо того, чтоб нормальные люди под hiero.ru разместили бы, допустим, сравнительную таблицу неправильных и редких написаний китайских иероглифов.

ззы. Это чтоб у вас какой нибудь осадок остался.
прошу прощения, а можно поинтересоватся — картинка на вашем аватаре вашего авторства?
или тоже найденая через гугловый поиск?
этим я хочу сказать, что если требуете от людей чего либо — начните себя
для предотвращения ответных распросов — в моем аватаре испльзован шрифт, заказанный специально для брендбука нашей компании.
Да, придирка к аватару — это стандартное завершение подобных споров, поскольку больше придраться не к чему:)

Если же серьёзно, то да, Вы правы — я, строго говоря, не имею права использовать этот аватар. Меня (в моих глазах) извиняет только то, что я не использую его именно как произведение — не иллюстрирую им статьи, не встраиваю его в рекламу и т. д. Аватар — это личный идентификатор, на месте которого, без малейшей потери функциональности, может быть любая закорючка. Примерно также я рассуждаю, когда вижу свои фотографии на чужих аватарах.

Но если подходить строго, то это всё не имеет значения и да, Вы правы, такое использование аватара тоже незаконно.
> Да, придирка к аватару — это стандартное завершение подобных споров, поскольку
> больше придраться не к чему:)

поучение других, не придерживаясь самим того чему учите — типичный пример, извините пожалуйста, быдла считающего себя самым умным.
я полностью поддерживаю вас в том, что использование чужой собственности — это нехорошо и должно быть наказанно, но я считаю что вы не имеете морального права осуждать автора за использование нелегального контента, когда сами его используете.
А вообще, Вы правы — поменяю-ка я его. Давно пора:)

За «быдло» извиняю, хотя лучше бы Вам подобных слов вовсе не употреблять…
В большинстве Ваших комментариев я повышал минусовые рейтинги плюсуя. В этом добавляю минус.

Все-таки это отговорка — учитывая к ЧЕМУ Вы придрались изначально — я считаю аватар это бОльшее нарушение.

Но вообще общее рейтингование меня пугает… Неужели реально девелоперы же не понимают простой истины — что некоторые вещи не делались бы, если бы за это не было возможности получать вознаграждение. И в том числе талантливые вещи.

Вы сторонник free content — ну и используйте фри контент, вертитесь, так сказать «с своем огороде», но не надо мешать тем, кто «с другого села».
О, какие люди:) Рад видеть.

Тут дело в том, что я, в отличие от большинства спорящих, имею какое-то понятие об авторском праве, поскольку им на работе и занимаюсь. И знаю, что помимо однозначных ситуаций в нём есть здоровенные серые зоны, связанные с использованием чего-либо в личных целях, в редакционных целях и т. д. и т. п. Авторское право отнюдь не запрещает всё на свете. И тот же аватар — это практически чистое «использование в личных целях».

А вот использование в качестве тематической иллюстрации к статье на открытом и популярном ресурсе — это уж, извините, именно воспроизведение, распространение и все те страшные слова, которыми пестрит гражданский кодекс.
>> А замените Вы тоже на «что-то из гугла»? Но ведь у новой картинки тоже будет автор…

но он не обязательно будет против, не все же через стоки продается, тем более что автор тут не коммерцией занимается. А вообще самое спокойное в этом случае, взять логотип питона и не парится :)
techlive.org/wp-content/uploads/2008/10/python-logo.png
Или логотип Питона, или на Фликре найти картинку с (cc)-лицензией. Вариантов море — есть много людей, которые сознательно отдают свои работы в бесплатное пользование. Или, как это ни чудовищно звучит — таки купить. За кровный доллар.

Но привычнее «взять из гугла», да.
>> Или, как это ни чудовищно звучит — таки купить

Знаете, я всегда стараюсь быть в стороне от противоборства «копирастов» против «халявщиков» поскольку считаю что и у тех и у тех есть серьёзные аргументы. Но моя логика подсказывает, что платить за картинку, чтобы использовать ее в качестве иллюстрации к бесплатной статье на которую потрачено время и силы, а отдается она любому желающему без какого-либо ограничения — это как то странно, мягко говоря.

Да, можно сказать/посоветовать топикстартеру, что желательно использовать free, дать рекомендации где взять свободные иллстрации, и то — желательно через личку. А говорить ему публично, что он вор и посылать его покупать картинки вместо «спасибо за статью»… имхо, это некрасиво.
Это долгий разговор, я не уверен, что его стоит затевать… Могу сказать, что из собственной практики (я работаю в фотобанке) знаю немало случаев, когда авторы покупали иллюстрации, например, к записям в своём ЖЖ. Если автор считает свой журнал не просто уютным дневничком, а чем-то большим — он относится к своей писанине серьёзно и не жалеет доллара на хорошую иллюстрацию. Это просто такое восприятие ценности своей работы и как следствие — уважение к работе чужой. Мы их к этому не принуждали — это были совершенно добровольные покупки (мы сами поначалу удивлялись:)).

А Хабр — это уж точно не уютный дневничок, а де-факто вполне нормальное онлайн-СМИ.
Но, опять же, я с самого начала оговорил, что покупка — это только одна из опций. Если автор не настолько высоко ценит свой текст, чтобы _покупать_ для него иллюстрации (или по каким-то иным причинам, не важно) — есть много бесплатных вариантов. Но просто так, на голубом глазу, использовать то, что сделал другой такой же обычный человек-дизайнер — это уж точно некрасиво.

Завтра эта статья будет (например) включена в книгу «Всё о Питоне». Без ведома автора. Будет автор этому рад? Даже если и будет — это он сам должен решать, а не издатель книги.
Пример кривой. Издатель книги имеет вполне осязаемую коммерческую прибыль — и это в корне меняет дело. Зарабатывать бабло на чужом труде не делясь с авторами(если они не дали на это разрешение) — это как раз и есть разновидность воровства.

Лучше привести другой пример, пользователь хабра XaocCPS ведет блог HabraDigest, выпуская сборники лучших топиков хабра. По вашему выходит, что он должен спросить у каждого автора разрешения? Разумеется он этого не делает и не будет. И еще пока никто в претензии не был, по крайней мере об этом ничего неизвестно.

Да, и вы не с самого начала говорили про «одну из опций», перечитайте свой первый комментарий в этой ветке
А первый комментарий вызван очень простым обстоятельством — я увидел картинку с совершенно явными водяными знаками Дримса. Т. е. спёртую с сайта, где она явно и недвусмысленно выставлена _на продажу_.
А каким образом простой человек можен отличить водяной знак Дримса от обычной закорючки?..
Максим, я чисто по человечески понимаю Вашу логику, но формально — получает некто коммерческую прибыль или нет — это совершенно неважно. Кстати, я забыл написать — книга «Всё о Питоне» предназначается для бесплатной раздачи голодающим детям Африки.

Я лично продолжаю утверждать, что решение участвовать в чём-то или нет — право автора, а не кого-либо ещё. Тем более, что в интернете нет вообще никаких проблем с этим. Я не против Хабрадайджеста, я сам его читаю, но если бы его составлял я — я бы явно спрашивал разрешение у авторов. От меня бы не убыло написать десяток писем — зато все были бы довольны. То есть, я не знаю, делает ли так XaocCPS, может делает, а может нет. Но, честное слово, не вижу в подобном спрашивании проблемы.
Я в своё время (давно) составлял на своём сайте подобный дайджест по фотографии. Писал письма авторам, ничего в этом страшного не видел. Ну да, пара человек сказали «нет». Имели полное право…
Раз уж меня тут упомянули, решил появится и сказать:

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

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

Тут надо сказать, что все как один разрешения давали, а многие просили больше у них не спрашивать и публиковать без разрешения, например уважаемый хабраюзер sunnybear.

По теме обсуждения считаю: использование картинки может быть оспорено только правовладельцем, все остальные пусть идут лесом и защищают только свои собственные картинки у себя в подвале.

Спасибо.
UFO just landed and posted this here
То есть я могу статью из топика использовать где захочу?
Если указать автора и дать ссылку, то, вероятно, не будет против. Но расчитывать на это я бы не стал.
UFO just landed and posted this here
UFO just landed and posted this here
никогда он не закроется. и возможно, не зафлашится. То есть, если программа продолжит после этой строчки работать, а потом свалится, данные могут не записаться полностью. Во-вторых, файл будет заблокирован (удалить его во время работы программы нельзя будет).

Файл надо закрывать либо с помощью close, либо оборачивать работу с файлом в with.
UFO just landed and posted this here
Если это Unix/Linux, то файл не удален, удалено его имя в родительском каталоге. Inode сохранен. Удалится inode (собственно файл) только тогда, когда закроется последняя программа, у которой он открыт. Если програма сохранит его, он появится снова в родительском каталоге.
Вековая мудрость UNIX!
UFO just landed and posted this here
Я кстати, ошибся, насчет того, что если программа запишет в него, а закрет после удаления, то файл не удалится.
А что касается Вашего вопроса, то думаю, что файл уберет GC, так как на него не будет ссылки в программе, однако гарантировать когда это произойдет, нельзя.
Кстати про сборщик мусора уже написали ниже.
Файл удалится физически после закрытия.
Пока он где-то открыт его можно найти в /proc/«id процесса»/fd/«дескриптор файла» (и вернуть если надо)

почему? потому: ru.wikipedia.org/wiki/Inode
Вы знаете что-нибудь о сборщиках мусора? Необходимо знать, что в языке со сборкой мусора не гарантируется, когда он вызовется.

Из документации видно, что при записи «file('close.test', 'w').write('foobar')», деструктор вызывается непосредственно после этой строчки («the current implementation uses a reference-counting scheme which collects most objects as soon as they become unreachable, but never collects garbage containing circular references»).

Однако другие реализации могут этого не делать: «An implementation is allowed to postpone garbage collection or omit it altogether».

При этом вы пользуетесь тем фактом, что у класса IOBase(object) описан следующий финализатор (вызывающийся при разрушении объекта):
def __del__(self):
        """Destructor.  Calls close()."""
        try:
            self.close()
        except:
            pass


Суть коммента в том, что если нечто не смотря ни на что работает на вашей конкретной машине (или даже на вашей системе в целом), это не обязаон работать вообще и может не являться корректной программой на данном языке. Как например строчка «main(){}» не является корректной программой на языке C++, однако компилируется некоторыми компиляторами для совместимости с C.
UFO just landed and posted this here
> Во-вторых, файл будет заблокирован

Это, наверное, про какую-нибудь винду, да?
Скрипты на Python стремятся быть кросс-платформенными. И для достижения этого необходимо соблюдать некоторые описанные конвенции, которые, возможно, имеют смысл не на всех платформах и не проверяются (для избежания оверхеда), но от этого не менее важные.
Вы считаете, что поэтому можно не закрывать файлы в linux? Иначе не понятно к чему коммент.
Народ, а кто-нибудь может сказать, в чем Perl или bash хоть в чем-нибудь лучше Python?
А то, я как даже не вижу смысла их учить.
смысл в том, что bash — язык, специально предназначенный для решения подобных ситуаций по администрированию, просто я оцениваю с точки зрения удобства написания кода и его читаемости. Просто зачастую удобнее воспользоваться кросплатформенным языком общего назначения, чем исконно предназначенным для этого инструментом, но тут уж каждому свое, как я и написал :)
IMHO Perl это почти то же самое, но я бы сказал, что Python это Perl, написанный заново с добавлением всяких вкусностей, типа лучшей объектности, итераторов и так далее.

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

bash не лучше, но знать нужно обязательно хотя бы потому, что он по умолчанию в линуксах в консоли.

Все — строгое ИМХО
вы не поймете пока сами не попробуете.

я не против Python, мне он нравиться также одинаково как и Perl.

но вот некоторые вещи на bash'e + perl все таки побыстрее (мне):

например

сплитим все файлы в текущей директории:

for f in *; do split -l20 -d $f $f.part.; done

меняем везде INSERT INTO на INSERT IGNORE

for f in *.part.*; do perl -p -i.orig -e 's/INSERT INTO `/INSERT IGNORE INTO `/' $f; done

да, там еще есть awk и sed :)
bash — чисто для скриптов. Лучше иметь представление, чтобы если что можно было поковырять исходники скриптов или написать какую-нибудь мелочь для себя.

Perl — просто очень специфический. Явные преимущества у него могут усмотреть только его адепты. Я, честно говоря, ни разу его не использовал с того момента, как выучил Питон до терпимого уровня. В Perl всё менее явно.

Ну вот разве что научитесь работать с регулярками. ) У меня после непродолжительного опыта общения с Перлом до сих пор коллеги с разных мест работы время от времени просят помочь составить регулярку.
Perl — король онлайнеров (от англ. oneline — одна строка), если надо что-то быстро один раз прожевать регулярками.
Скорее всего вы правы. Но лично для меня это за преимущество не идёт. Так, приятная мелочь. А вот с точки зрения более глобального программирования там всё куда более мрачно. Честно говоря я уже давно не следжу за этим языком, но раньше ООП было в зачаточном состоянии (судя по слухам Moose'ом его худо-бедно очеловечели, да и то довольно своеобразно), аргументы передавались в один расплющенный массив (до сих пор после этого не нарадуюсь питоновскому синтаксису func(var1=1, var2=2)), можно было менять местами метод и объект… Ну и т.д. С точки зрения синтаксиса это всё очень страшно.

С другой стороны, однажды мне посчастливилось видеть один сайтик, написанный профессионалом. Действительно всё было более-менее просто, логично и красиво. Но остальные то 99% скриптов, которые попадались мне на глаза, — это каша какая-то. Почему-то вспоминается фраза (не помню откуда): «Единственный способ нанести вред пращей, не научившись пользоваться ей почти профессионально, — повеситься».
Это верно. Я люблю Перл, но ООП в нём у меня как-то не пошло, какое-то оно там кривое по сравнению со всем остальным. Что-то большое писать на Перле ИМХО довольно сложно, сам язык провоцирует писать непонятные программы (даже если и понятно мне не значит, что будет понятно другим или мне же через год).
позвольте поинтересоваться, что сложного в ООП на Перле, чем оно кривое?

И что сложного в написании чего то большего на Перле?

В Перле есть ООП, есть пакеты (package), сигнатуры методов, есть use strict и use warnings :)
Все есть, но не нравится, не перловое ООП какое-то в перле (а без strict и warnings вообще что-то длинней 20 строк писать опасно).

Мое личное впечатление, не обязательно правильное)
сравните с C$ ;)

правда, и Питон тут недалеко ушёл )

Эх, большинство не поймёт моей любви к строгой типизации и т.п.
Фишка скриптовых языков это как раз динамическая типпизация. Из-за строгой типизации очень много приходится накручивать сложностей в больших программах на C++.
Bash (или другой shell) гарантированно есть на любой unix-системе.
Да, последнее время скажем в linux практически всегда есть и perl, и python, но стоит переместиться в область embedded-систем и там уже их может не быть.
bash обычно есть везде.

Perl — почти везде.

Python — почти-почти везде…

Жалко, Mono почти нигде )))
спасибо. отличная статья.
замена Perl и Bash скриптов на Python приятная и хорошо оплачиваемая работа ;)
Отличная статья, отличные комменты :) Жду продолжения, т.к. впринципе все это уже использую :)
До сих пор помню этот ужас, который приходилось писать на голом Си — считывание файла построчно в переменную и перезапись его по другому адресу…
И дальше идет пример с вызовом Popen, который на голом Си делается точно так же в одну строчку, только с system вместо Popen. Зачем вы так?
Вот пример получше) Открываем файл test.in и копируем его в test.in.inv, попутно применив битовое 'НЕ'.

from __future__ import with_statement
with open("test.in""rb") as infile:
    with open("test.in.inv""wb") as outfile:
        outfile.write(''.join([chr(~ord(x)&0xFF) for x in infile.read()]))
Так я не спорю, что на питоне многие вещи сделать проще и короче, я про то, что данный конкретный пример некорректен.
Ага, пример не очень удачный. Хотя если имена файлов лежат в переменных, то даже вызов Popen в Си требует танцев с буферами для строк и тд.
А чем это красивее примера на C#? Тем более что это типизированный язык. Аналогично наверняка можно на Java.

using (var infile = File.OpenRead(«test.in»))
{
using (var outfile = File.OpenWrite(«test.in.inv»))
{
for (var b = infile.ReadByte(); b != null; b = infile.ReadByte())
{
outfile.WriteByte(~b);
}
}
}

P.S.: возможно, ошибься где-то, не компилироал. Тем более можно упростить, прочитать и записать сразу массив байт, или порциями, в зависимости от задачи.
Если уж сравнивать то примеры надо брать рабочие) Хотя, не считая кол-во скобок, смотрится тоже не плохо

using System;
using System.IO;
 
class Sample
{
  static void Main() {
    using(FileStream infile = File.OpenRead(@"test.in")) {
      using(FileStream outfile = File.OpenWrite(@"test.in.inv")) {
        int b;
        while (-1 != (= infile.ReadByte())) {
          outfile.WriteByte((byte)~b);
        }
      }
    }
  }
}
Вообще, на UNUX-ах ни Python ни Perl полностью заменить Sh/Bash по моему мнению не могут.

Аргументация:
— На Perl и Python сложнее управлять другими приложениями, хотя бы просто запускать
— На Perl и Python сложнее управлять процессами
— Perl и Python сложнее работать в интерактивном режиме

Сила Sh/Bash в том, что можно попробовать команды в интерактивном режиме, потом записать их в скрипт и это будет работать. Т.е. полная замена Bash, включая язык скриптов и интерактивный режим неудобна, а вот если рассматривать только написание скриптов, вполне возможно. А если интересует крссплатформенность, тут уже Python лучше, чем Bash.

Другое дело на Виндовс, там свой командный язык, «cmd» очень неудобный, толкового встроенного управления процессами из командной строки практически нет, там это вполне вариант.
Уведомлялка в jabber вместо всем привычной по smtp

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import xmpp

login='server'
pwd='xxxxxxx'

cnx=xmpp.Client('myhost.ru')
cnx.connect( server=('talk.google.com',5223) )
cnx.auth(login,pwd, 'botty')

mess=«Сообщение от сервера myhost.ru\n»+sys.argv[1]
cnx.send( xmpp.Message( «admin@myhost.ru» ,mess ) )


P.S. а как постить с подсветкой синтаксиса?
Один хабраюзер сервис специальный создал, респект ему
s-c.me/
Опять придумываете выдуманные задачи и пишите к ним спорные решения.
Когда кто-нибудь из практикующих сисадминов опишет свой опыт использования питона с реальными примерами? Строчка на баш/перл/авк/сед/етц и строчка на питоне полноценно её заменяющая.
Иначе это всё путь к холиварам из-за картинки используемой в тексте.
Sign up to leave a comment.

Articles