31

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

32 (31.01.2013 23:09:08 отредактировано xxblx)

valet пишет:

это cd html_in для моего случая, как это будет на питоне понятия не имею

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from os import listdir, remove
from subprocess import call

while True:
    files = listdir('./html_in')
    if len(files) > 0:
        for f in files:
            call('./script %s > ./html_out/%s' % f, shell = True)
            remove(f)
    else:
        break

. = текущий каталог
./html_in = каталог html_in лежащий внутри текущего каталога bx

Fedora GNOME3

33

Все та же ошибка:

Traceback (most recent call last):
  File "./obrabotka", line 11, in <module>
    call('./script %s > ./html_out/%s' % f, shell = True)
TypeError: not enough arguments for format string

34

valet пишет:

Все та же ошибка:

а если не call попробовать

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from os import listdir, remove
from subprocess import Popen

while True:
    files = listdir('./html_in')
    if len(files) > 0:
        for f in files:
            cmd = './script %s > ./html_out/%s'
            cmd_run = Popen(cmd, shell = True)
            cmd_run.poll()
            cmd_run.wait()
            remove(f)
    else:
        break
Fedora GNOME3

35

xxblx, ошибку принципиально не хочешь прочесть?

как-то так:

valet пишет:

call('script %s > html_out/%s' % (f, f), shell = True)

valet пишет:

То есть тут должен быть переход в каталог обработки, на bash'е это cd html_in для моего случая, как это будет на питоне понятия не имею, может поэтому и ошибка, потому что я привел скрипт к виду:

os.chdir(); не забудь его импортировать в начале...
а вообще это не важно: скрипт можно вызвать из любого каталога... только нормально путь к sed-скрипту надо прописать или в PATH добавить...

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

95% процентов проблем находятся между клавиатурой и стулом.

36 (01.02.2013 00:49:22 отредактировано -=Serj=-)

Fat-Zer пишет:

call('script %s > html_out/%s' % (f, f), shell = True)

Ага, извиняюсь... Поправил.

Да, у меня Ubuntu.
Нет, не глючит.

37

Fat-Zer пишет:

xxblx, ошибку принципиально не хочешь прочесть?

Блин, точно. Сам себе поражаюсь - пока носом не тыкнули, не увидел ошибку.
Спасибо за замечание.

Кстати, вопрос, сразу по call и Popen, для подобного скрипта - однофигственно что использовать или call все-таки предпочтительней? Сам я обычно просто всегда делаю
cmd = 'команда'
cmd_run = Popen(cmd, shell = True)
cmd_run.poll()
cmd_run.wait()
Вот интересно стало, может лучше call делать.

Fedora GNOME3

38

Да не работают, ребята, ваши варианты. Как я понимаю вот эта переменная %s не подставляется:

/bin/sed: can't read %s: No such file or directory

Вы хоть сами проверяете что пишите? ab

39 (01.02.2013 11:59:59 отредактировано -=Serj=-)

xxblx пишет:

Вот интересно стало, может лучше call делать.

Бизли:

call(args, **parms)
Эта функция выполняет те же действия, что и функция Popen(), за исклю-
чением того, что она просто выполняет команду и возвращает код заверше-
ния (то есть она не возвращает объект класса Popen). Эту функцию удобно
использовать, когда требуется всего лишь выполнить команду и нет необ-
ходимости получать от нее вывод или управлять ею каким-либо способом.
Аргументы имеют тот же смысл, что и в функции Popen().


valet пишет:

Вы хоть сами проверяете что пишите?

Неа:)

Да, у меня Ubuntu.
Нет, не глючит.

40

valet пишет:

Да не работают, ребята, ваши варианты. Как я понимаю вот эта переменная %s не подставляется:

УМВР.
пользуйся башем или изучай питон...

95% процентов проблем находятся между клавиатурой и стулом.

41

Fat-Zer пишет:

пользуйся башем или изучай питон...

да я и пользуюсь вообще-то ab
Просто был приведен пример сначала одного питон-скрипта - ошибка, потом другого вроде как с иправлением - тоже не работает ab
У меня видать питон какой-то неправильный раз вы говорите УМВР ab

42 (01.02.2013 20:31:37 отредактировано -=Serj=-)

Либо опишите задачу полностью. Что должен делать сторонний скрипт? Тогда можно попробовать всё на Python переписать, без костылей...

valet пишет:

Просто был приведен пример сначала одного питон-скрипта - ошибка, потом другого вроде как с иправлением - тоже не работает

Я первый вариант и исправил - Самый быстрый способ выборки случайного файла из директории

Да, у меня Ubuntu.
Нет, не глючит.

43

-=Serj=- пишет:

Неа:)

я вижу ))

44

-=Serj=- пишет:

Либо опишите задачу полностью. Что должен делать сторонний скрипт? Тогда можно попробовать всё на Python переписать, без костылей

Я это сделал еще в первом посте.

Задача такая - имеется один скрипт, который постоянно складывает файлы в каталог html_in. Второй скрипт обрабатывает sed'ом файлы из html_in и ложит их в html_out

45 (01.02.2013 20:49:09 отредактировано -=Serj=-)

valet пишет:

Второй скрипт обрабатывает sed'ом файлы из html_in и ложит их в html_out

-=Serj=- пишет:

Что должен делать сторонний скрипт?

Что делает этот второй скрипт?

Да, у меня Ubuntu.
Нет, не глючит.

46 (02.02.2013 10:07:35 отредактировано valet)

-=Serj=- пишет:

Что делает этот второй скрипт?

Убирает из файла все теги

<strong> </strong> <b> </b>

И прописывает все ссылки через редирект

Вот код этого sed-скрипта:

#!/bin/sed -rf

s~</b>~∑</b>~gi
s~<b>([^∑]+)∑</b>~\1~gi
s~</strong>~∑</strong>~gi
s~<strong>([^∑]+)∑</strong>~\1~gi
s~(href=")([^"]+)~target="_blank" href="http://site.ru/redir.php?\2~gi
s~∑~~gi

47 (02.02.2013 13:23:58 отредактировано -=Serj=-)

Я sed не знаю, поэтому здесь

valet пишет:

прописывает все ссылки через редирект

поподробнее. Ко всем ссылкам добавляет

http://site.ru/redir.php?

?

Да, у меня Ubuntu.
Нет, не глючит.

48

-=Serj=- пишет:

http://site.ru/redir.php?

именно так
то есть каждое вхождение:

href="http://

меняется на

href="http://site.ru/redir.php?http://

49

Пробуйте

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from os import listdir, remove
from os.path import isfile, join 
from re import compile 

PATT = compile(r'<b>|</b>|<strong>|</strong>')
PATT2 = compile(r'href=\"(.+?)\"')

def conv(f):
    desc = open(join('./html_in', f), 'r')
    data = desc.read()
    data = PATT.sub('', data)
    data = PATT2.sub(r'href="http://site.ru/redir.php?\1"', data)
    desc.close()
    desc = open(join('./html_out', f), 'w')
    desc.write(data)
    desc.close()
    remove(join('./html_in', f))

while True:
    files = listdir('./html_in')
    if len(files) > 0:
        for f in files:
            if isfile(f):
                conv(f)
    else:
        break

Скрипт запускать из директории, содержащей html_in и html_out.

Да, у меня Ubuntu.
Нет, не глючит.

50

Не работает.
Запустил, все это очень долго стояло, я думал шуршит, а потом думаю дай гляну сколько уже сделало - смотрю в html_out - а там пусто.
на Ctrl+C убил скрипт  - выдало следующее:

$ ./start 
^CTraceback (most recent call last):
  File "./start", line 26, in <module>
    if isfile(f):
  File "/usr/lib/python2.6/genericpath.py", line 31, in isfile
    return False
KeyboardInterrupt

51

Попробуйте убрать эту проверку

-=Serj=- пишет:

if isfile(f):

Да, у меня Ubuntu.
Нет, не глючит.

52

-=Serj=- пишет:

Попробуйте убрать эту проверку

Спасибо, так работает и похоже правильно.
Позже потестирую еще по скорости, но на глазок опять таки Питон рулит!