سؤال

في Linux، أرغب في تشغيل نافذة شريط التقدم gnome zenity من PHP.طريقة عمل الزينيتي هي كالتالي:

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

لذا فإن الأمر الأول يفتح شريط التقدم zenity عند 0 بالمائة.يأخذ Zenity بعد ذلك أرقام الإدخال القياسية كنسبة مئوية لشريط التقدم (وبالتالي ستنتقل من 10% إلى 50% إلى 100% عند كتابة هذه الأرقام).

لا يمكنني معرفة كيفية جعل PHP تكتب هذه الأرقام، على الرغم من أنني حاولت:

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

و:

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

و:

$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);

لكن لا أحد منهم يقوم بتحديث شريط التقدم.كيف يمكنني محاكاة تأثير stdin على غلاف Linux للحصول على zenity لتحديث شريط التقدم الخاص به؟

هل كانت مفيدة؟

المحلول

أولاً، يتم تنفيذ الأمر باستخدام نسخة من stdin الخاص بالبرنامج النصي الحالي، وليس النص الذي تقدمه.

فشل الثاني لأنك نسيت السطر الجديد.يحاول fwrite($handle, "10\n") بدلاً من.لاحظ أن الكثافة تبدو وكأنها تقفز إلى 100% عند الوصول إلى EOF (على سبيل المثال.بالإغلاق الضمني لـ $handle في نهاية البرنامج النصي PHP الخاص بك).

فشل الثالث لأنك نسيت السطر الجديد وأنت تكتب في الأنبوب الخطأ.يحاول fwrite($pipes[0], "10\n") بدلاً من ذلك، وتذكر نفس الملاحظة المتعلقة بـ EOF كما هو مذكور أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top