2010-10-10 14 views
6

Bir MP3 çalar için web arayüzü geliştiriyorum (mpg123 linux). Mpg123 bir komut satırı mp3 çalar ve klavye girişleri kullanılarak kontrol edilebilir. Örneğin:Çalışan bir işlem linux için klavye girişi gönder

$ mpg123 -C filename.mp3 

o şarkıyı çalmaya başlar ve kontrol için klavye girişlerini izleyecektir. '' '' Tuşuna basmak, 'q' şarkısını duraklatmak için duraklatacaktır.

Perl komut dosyası kullanarak bir mpg123 prosesi oluşturuyorum. Bu senaryodan, bu sürece girdi göndermek istiyorum. İşlemin pidine sahibim, sadece kontrol amacıyla bu sürece tuş vuruşlarını göndermem gerekiyor.

cevap

6

Sadece mp3 çalarınızı perl'den boru olarak üretmeniz gerekiyor. böylece gibi: Birden fazla komut çağırmaları için

$| = 1; # Set unbuffered output. 
open(my $mp3player, "| mpg123") or die "cannot start mp3 player: $!"; 
print $mp3player "s"; 
... 
print $mp3player "q"; 
close $mp3player 

İkinci deneyin: interaktif bir kabuk içinde tty girin. Bu size bir sahte terminal adı verecektir. Şimdi oynatıcınızı bu kabukta başlatın. Başka bir kabukta, sözde terminaline yaz. Örneğin. echo "s" > /dev/pts/11. Oyuncu bunu giriş olarak alacak. Bu çalışırsa, sahte terminaline yazmak için echo yerine echo komutunu kullanın.

+0

Teşekkürler Peter, bu çözümle ilgili bazı problemlerim var. Bu yöntemi kullanarak, mpg123'e engelleme olmayan bir çağrı yapamıyorum. Mp3 çaları başlatmalıyım ve scriptim çıkmalı. Komut yeniden çağrıldığında ("stop" gibi diğer parametrelerle). Çalışma sürecine bir stop sinyali göndermelidir. –