Управление фоновым процессом

Следующий скрипт perl извлекает имя случая в $ outfile , если строка соответствует шаблону ER (пробел, E, R, пробел), который не является строкой номера страницы (m / ER (?! P \ d +) /) , и записывает все последующие строки (пока не обнаружит, что шаблон снова и, следовательно, новое имя файла) в файл с именем out / $ outfile.txt .

#! /usr/bin/perl

use strict;

my $outfile='/dev/stdout';
open(OUTFILE,">","$outfile") || die "couldn't open $outfile for write: $!\n";

while (<>) {
    chomp;
    if (m/ ER (?!p\d+)/) {
       $outfile = substr($_,0,200);
       open(OUTFILE,">>","./out/$outfile.txt") || die "couldn't open ./out/$outfile.txt for write: $!\n";;

       if (-s "./out/$outfile.txt") {
           print OUTFILE "\n\n-=-=-=-=-=-=-=-=\n\n";
       }
    };
    print OUTFILE $_,"\n";
}

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

Используя list-of-case-volume-1.txt (с удаленными номерами строк и сохраненными как ases2.txt ), вывод (Используя Lambert * случаев в качестве примеров):

$ mkdir -p out/
$ ./hef.pl cases2.txt
$ ls -1 out/Lambert*
out/Lambert v Aeretree 1 Lord Raymond 223, 91 ER 1045.txt
out/Lambert v Atkins and Another 2 Campbell 272, 170 ER 1153.txt
out/Lambert v Cook 1 Lord Raymond 237, 91 ER 1055.txt
out/Lambert v Oakes 1 Lord Raymond 443, 91 ER 1194.txt
out/Lambert v Pack 1 Salkeld 127, 91 ER 120.txt
out/Lambert v Peyton [1860] 7 House of Lords Cases 423, 11 ER 169.txt

Некоторые из входных строк (4176 из 12861 строк) были для повторяющихся имен случаев, поэтому я изменил сценарий выше, чтобы добавить дополнительные строки для этого случая в существующий файл с - = - = - = - = - = - = - = - = в качестве разделителя.

Некоторые заголовки регистров были слишком длинными для использования в качестве имени файла, поэтому я использовал substr ($ _, 0,200) , чтобы ограничить имя файла первыми 200 символами. Другой альтернативой, которая могла бы привести к появлению нечеловечески понятных имен файлов, было бы использование хеша md5sum имени case в качестве имени файла.Название дела по-прежнему будет в первой строке файла.

Один, надеюсь, последний комментарий. Нетрудно изменить приведенный выше сценарий для использования модуля perl DBI и базы данных postgres или mysql для хранения всех этих записей в базе данных с возможностью поиска .... с именем случая в качестве заголовка. поле индекса и текст в текстовом поле.

2
08.06.2018, 10:40
4 ответа

No hay una solución genérica pero hay al menos 2 jugadores que podrían Haz eso.

El primero es mplayerjunto connamed pipes.

Primero, cree /tmp/mplayer.fifotubería con nombre:

$ mkfifo /tmp/mplayer.fifo

Inicie mplayery apúntelo a/tmp/mplayer.fifo:

$ mplayer -novideo -idle -slave -input file=/tmp/mplayer.fifo file.mp3 </dev/null >/dev/null 2>&1 &

Ahora puede pausar y reanudar la reproducción escribiendo a/tmp/mplayer.fifo:

$ echo pause > /tmp/mplayer.fifo

Posteriormente pausereanudará la reproducción:

$ echo pause > /tmp/mplayer.fifo

También puede hacer otras cosas, por ejemplo, avance rápido:

$ echo seek +60" > /tmp/mplayer.fifo

o rebobinar la reproducción:

$ echo "seek -60" > /tmp/mplayer.fifo

El segundo es mocp. Iniciar reproducción:

$ mocp -S; mocp -p file.mp3

Pausar/reanudar la reproducción:

$ mocp --toggle-pause
1
27.01.2020, 21:58

La implementación de este control normalmente estaría dentro del propio programa, pero una forma muy común de llevar a cabo este tipo de interfaz es una Tubería con nombre . Siempre que esté en el mismo host y no esté abriendo sockets para el control de la red. Puede crear su propio programa para usar la tubería con nombre y ejecutar los comandos necesarios, eliminar el proceso, etc. Si desea ver una tubería con nombre en acción, le sugiero que instale el reproductor CLI para Pandora ; barra de piano . Lo usa para aceptar comandos como en su ejemplo.

0
27.01.2020, 21:58

Si usar el reproductor VLC es una opción, puede controlar un proceso VLC en ejecución a través de aplicaciones remotas (GUI )o CLI usando llamadas dbus.

Por ejemplo -suponiendo que qdbus está instalado -alterna entre reproducción/pausa en la música que se está reproduciendo actualmente:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.PlayPause

o ir a la siguiente pieza de la lista de reproducción:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Next

Ver todos los comandos disponibles:

$ qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2

Ver también este hilohttps://stackoverflow.com/questions/14256193/linux-control-a-running-vlc-process-through-command-line

2
27.01.2020, 21:58

Вы можете заглянуть в MPD , так как он может делать практически все, что вам может понадобиться: (удаленное управление, добавление новых треков и т. д. ). Вместо того, чтобы работать как фоновый процесс в вашей оболочке, он работает как системная служба, что означает, что его можно легко использовать в нескольких сеансах и входах в систему.У него даже есть возможность разрешить удаленное управление из другой системы (. Он широко используется для сетевых -устройств типа музыкальных автоматов -).

Для него также есть несколько приятных внешних интерфейсов, в том числе те, которые можно использовать с консоли.

1
27.01.2020, 21:58

Теги

Похожие вопросы