Возможно, я пропускаю что-то, но не можете Вы просто сделать:
(./handle_1.py & ./handle_2.py & ./handle_3.py) | sort -n
Если Вы хотите, чтобы строки от каждого процесса не были чередованы, более легкое должно, вероятно, удостовериться, что процесс сами пишет им полностью и возможно отключает вывод, буферизующий как write
s к каналу, как гарантируют, будут атомарными, пока они не больше, чем PIPE_BUF
. Например, Вы могли удостовериться, что это действительно использует вывод, буферизующий а-ля stdio
и звоните fflush
или независимо от того, что эквивалент находится в python
после того, как одна или несколько строк были записаны.
Если Вы не можете изменить сценарии Python, Вы могли бы сделать:
lb() { grep --line-buffered '^'; }
(с GNU grep) или:
lb() while IFS= read -r l; do printf '%s\n' "$l"; done
(См. примечания в комментариях ниже если, что вывод команд не является текстом),
И сделайте:
(./handle_1.py | lb & ./handle_2.py | lb & ./handle_3.py | lb) | sort -n
Другая опция избежать тех 3 lb
процессы должны иметь три канала к одной команде, которая использует select
/poll
видеть, где существует некоторый вывод, прибывающий из, и подает его к sort
основанный на строке, но требуется немного программирования.
Хорошо, глупый меня не думал о факте, тот Windows и Linux на значение по умолчанию имеют тайм-аут ARP точно 30 секунд, как каждый видит путем выполнения a
netsh interface ipv4 show interface 2
в cmd.exe, где эти 2 должен быть заменен Idx Вашего NIC, каждый добирается путем издания
netsh interface ipv4 show interfaces
На типе Linux
cat /proc/sys/net/ipv4/neigh/default/base_reachable_time_ms
в Вашем ударе, для наблюдения тайм-аута ARP по умолчанию в миллисекундах.
Таким образом, решение состояло бы в том, чтобы привести в порядок статический адрес ARP для пробуждения системы через SSH или SMB или что бы то ни было. Чтобы сделать это делает a
arp -s 10.0.0.200 00-10-54-CA-E1-40
в Windows и a
arp -s 10.0.0.200 00:10:54:CA:E1:40
в Вашей системе Linux.