2011-03-26 36 views
6

Trong linux tôi muốn chạy một cửa sổ thanh tiến trình gnome zenity từ PHP. Cách hoạt động của zenity như sau:Viết tới stdin từ PHP?

linux-shell$ zenity --display 0:1 --progress --text='Backing up' --percentage=0 
10 
50 
100 

Vì vậy, lệnh đầu tiên mở thanh tiến trình zenity ở 0%. Zenity sau đó có số đầu vào tiêu chuẩn như tỷ lệ phần trăm thanh tiến trình (vì vậy nó sẽ đi từ 10% đến 50% đến 100% khi bạn gõ những con số đó).

tôi không thể tìm ra cách để có được PHP để gõ vào những con số, mặc dù tôi đã cố gắng:

exec($cmd); 
echo 10; 
echo 50; 

Và:

$handle = popen($cmd, 'w'); 
fwrite($handle, 10); 

Và:

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin is a pipe that the child will read from 
    1 => array("pipe", "w") // stdout is a pipe that the child will write to 
); 

$h = proc_open($cmd, $descriptorspec, $pipes); 

fwrite($pipes[1], 10); 

Nhưng không ai trong số họ cập nhật thanh tiến trình. Trong cách nào tôi có thể bắt chước hiệu ứng của stdin trên vỏ linux để có được zenity để cập nhật thanh tiến trình của nó?

Trả lời

6

Lần đầu tiên bạn thực hiện lệnh bằng một bản sao của stdin của tập lệnh hiện tại, chứ không phải văn bản bạn cung cấp.

Lỗi thứ hai của bạn vì bạn quên dòng mới. Thay vào đó, hãy thử fwrite($handle, "10\n"). Lưu ý rằng zenity dường như nhảy tới 100% khi đạt được EOF (ví dụ: bằng cách đóng ngầm của $handle ở cuối tập lệnh PHP của bạn).

Thất bại thứ ba của bạn vì bạn quên dòng mới và bạn đang viết sai đường ống. Thay vào đó, hãy thử fwrite($pipes[0], "10\n") và ghi nhớ cùng một lưu ý về EOF như trên.

+0

Cảm ơn rất nhiều! Không thể tin rằng tôi đã quên dòng mới! :) – hamstar