2010-10-10 29 views
6

Tôi đang phát triển giao diện web cho trình phát mp3 (mpg123 linux). Các mpg123 là một máy nghe nhạc dòng lệnh mp3 và có thể được kiểm soát bằng cách sử dụng đầu vào bàn phím. Ví dụ:Gửi đầu vào bàn phím đến một quá trình chạy linux

$ mpg123 -C filename.mp3 

nó sẽ bắt đầu phát bài hát và theo dõi đầu vào bàn phím để điều khiển. Nhấn 's' sẽ tạm dừng bài hát 'q' để thoát khỏi v.v.

Tôi đang sinh ra một quá trình mpg123 bằng cách sử dụng tập lệnh Perl. Từ kịch bản đó, tôi muốn gửi đầu vào cho quá trình này. Tôi có pid của quá trình, tôi chỉ cần gửi tổ hợp phím cho quá trình này cho mục đích kiểm soát.

Trả lời

6

Bạn chỉ cần tạo trình phát mp3 của mình dưới dạng đường ống từ perl. Giống như vậy:

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

Lần thử thứ hai cho nhiều lệnh gọi tập lệnh: Trong một trình tương tác, nhập tty. Điều đó sẽ cung cấp cho bạn một tên giả thiết bị đầu cuối. Bây giờ hãy bắt đầu trình phát của bạn trong trình bao này. Trong một trình bao khác, hãy viết vào thiết bị đầu cuối giả đó. Ví dụ. echo "s" > /dev/pts/11. Người chơi sẽ nhận được điều này làm đầu vào. Nếu điều này làm việc, sử dụng script perl của bạn thay vì echo để ghi vào pseudo-terminal.

+0

Cảm ơn Peter, tôi có một số vấn đề với giải pháp này. Sử dụng phương pháp này, tôi không thể thực hiện cuộc gọi không chặn đến mpg123. Tôi cần khởi động trình phát nhạc mp3 và tập lệnh của tôi sẽ thoát. Khi kịch bản được gọi lại (với các tham số khác như "stop"). Nó sẽ gửi tín hiệu dừng cho tiến trình đang chạy. –

Các vấn đề liên quan