2011-01-09 2 views
0

У меня есть подпроцесс python, который я бы хотел связать с тремя трубами (два стандартных и один стандартный). Я знаю, что есть только один/dev/stdin, но есть все другие устройства в/dev, о которых я не знаю, и не знаю ни одного модуля python os, sys или subprocess, который будет использовать их таким образом, чтобы позволяет мне указать путь к подпроцессу устройства.
Причина, по которой я прошу, состоит в том, что я хотел бы передавать информацию из базы данных mysql или tar-архива, а не в структуру каталога, в которой я сейчас имею, в которой есть> 28 000 каталогов. Названия каталогов используют LOT пространства! Альтернативой является tar/gunzip всей структуры каталогов и маневр через сжатый архив. С любым решением, mysql или tar, я все равно хотел бы иметь два канала в subprocess.Popen и один из них, чтобы я мог обойти жесткий диск.
Любая потребность в примере ???Несколько вызовов в/dev/stdin с использованием подпроцесса python (* nix)

+1

Не бойтесь знаков препинания. :) –

ответ

3

В системах Unix удобной альтернативой является использование named pipe. Он выглядит как файл, но не занимает места на диске; вы можете написать ему с помощью одного процесса и прочитать его с помощью другого, как трубы. Вы можете заставить ваш подпроцесс выполнять обычный ввод-вывод файлов; Unix (Mac OS/Linux) сделает тяжелую работу для вас.

% mkfifo foo 
% cat giantFile > foo & 
[1] 4667 
% wc -l foo 
100 
+0

круто, я никогда не использовал mkfifo или wc раньше .. Вам придется заглянуть в них. Спасибо :) –

+0

У меня был момент Эврики в постели прошлой ночью, посмотрев на страницу названных труб, которую вы отправили ... т.е. Вот как сделать все мои кодовые окна совместимыми! Я полагался на предоставление/dev/stdin &/dev/stdout в качестве имен пути для вызовов подпроцесса все время. Это зависание! Потрясающие! Еще раз спасибо! Если бы только программы, которые я вызывал, имели исполняемые файлы/установщики Windows тоже .... –

+0

darn. python os.mkfifo() работает только в ОС Unix. Однако, найдите эту ссылку: - http://bytes.com/topic/python/answers/43082-example-code-named-pipes-python-2-4-ctypes-windows –

Смежные вопросы