Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Unix-way не торт

Автор myst, декабря 7, 2010, 13:00

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

Alone Coder

Кто мешает загнать data-source1 и data-source2 в одну задачу? Всё равно на один выход одного приходится ровно один выход другого.

Demetrius

Тогда эта программа уже будет выполнять больше одной вещи => это не юниксвей

Python

Код работоспособного костыля, о котором шла речь выше:

MYFILE=`mktemp`
echo $MYFILE
cat> $MYFILE

Без параллельности, но работает.

Попытки вклинить туда пайп:

MYFIFO=`mktemp -u`
mkfifo $MYFIFO
echo $MYFIFO
cat> $MYFIFO &
как и следовало ожидать, не дали результатов — вешается.

Пришел к выводу, что проще создать собственную надстройку над шеллом (получающую команды в удобочитаемом синтаксисе, например:
comparator `program1|filter1|` `program2|filter2|`
и преобразовывающую их в серию выполнимых команд), чем заставить костыль работать в многопоточном режиме. Проще всего, конечно, сделать то же, что и в примере oort'a (Unix-way не торт№12), но имена фифо желательно генерировать автоматически.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

myst

Цитата: Alone Coder от декабря  9, 2010, 22:53
Кто мешает загнать data-source1 и data-source2 в одну задачу? Всё равно на один выход одного приходится ровно один выход другого.
Чово?
Пример: есть два файла с таблицами (длина, частота, словоформа); требуется узнать, каких словоформ не хватает в первом первом файле и наоборот.

Alone Coder

Тогда вам многозадачность ни разу не поможет.

myst

Цитата: Alone Coder от декабря 10, 2010, 12:02
Тогда вам многозадачность ни разу не поможет.
А мне она ни разу и не нужна.

Python

Я тут порылся в мануалах к башу. Кажется, там все же есть то, что нам требуется. Unix-way — торт :)
Цитировать
Process Substitution
Process substitution is supported on systems that support named pipes (FIFOs) or the /dev/fd method of naming open files. It takes the form of <(list) or >(list). The process list is run with its input or output connected to a FIFO or some file in /dev/fd. The name of this file is passed as an argument to the current command as the result of the expansion. If the >(list) form is used, writing to the file will provide input for list. If the <(list) form is used, the file passed as an argument should be read to obtain the output of list.

When available, process substitution is performed simultaneously with parameter and variable expansion, command substitution, and arithmetic expansion.
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

Python

Цитата: myst от декабря  7, 2010, 13:00
Мне надо смастерить следующий агрегат:
data-source1 → filter1
                                       ↘
                                           →  comparator → result
                                      ↗
data-source2 → filter2
:wall:
comparator <(filter1<data-source1) <(filter2<data-source2) >result

Цитата: oort от декабря  8, 2010, 16:23
mkfifo /tmp/fifo{1,2}
prog1 | filter1 > /tmp/fifo1 &
prog2 | filter2 > /tmp/fifo2 &
comparator /tmp/fifo{1,2}

comparator <(prog1 | filter1) <(prog2 | filter2)
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

myst

Именованные каналы по-прежнему обламывают. :(

Python

Цитата: myst от декабря 12, 2010, 13:52
Именованные каналы по-прежнему обламывают. :(
Вас утешит, что они автоматически удаляются сразу после завершения использующей их команды (во всяком случае в цѵгвине, с убунтой не проверял, но, думаю, там тоже):

$ echo <(ls)
/proc/self/fd/63

$ cat /proc/self/fd/63
cat: /proc/self/fd/63: No such file or directory
Пролетареві ніколи вчити європейських мов, бодай би свою знати добре і на ній принести до своєї хати світло знання (Гнат Хоткевич)
ÆC CASALI NAXI PRASQURI: AHOV CÆRU, MERTVÆRI TÆ SLAVUTÆT!
Вони просили його: «Скажи: кетум», а він говорив: «сатем», і не міг вимовити правильно.
Хотелось бы также отметить, что "Питон" - это "мышиный язык" : "пи+тон". © АБР-2

myst


myst

Цитата: http://zsh.sourceforge.net/Intro/intro_7.html
Note that the shell creates a temporary file, and deletes it when the command is finished.
Торт.

Алексей Гринь

Очередной хак вокруг кривой архитектуры — ничего удивительного. Меня ещё очень веселят временные файлы-мьютексы, чтобы нельзя было открыть две instances программы на один и тот же файл.
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от декабря 13, 2010, 02:51
Очередной хак вокруг кривой архитектуры — ничего удивительного.
Да, но что поделать? Замены нет. :(

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр