هل من الممكن التواصل مع عملية فرعية باستخدام عملية فرعية مفتوحة؟

StackOverflow https://stackoverflow.com/questions/250700

  •  05-07-2019
  •  | 
  •  

سؤال

أحاول كتابة نص برمجي بلغة بايثون يحزم برامجنا.يحتاج هذا البرنامج النصي إلى بناء منتجنا وتعبئته.لدينا حاليًا نصوص برمجية أخرى تقوم بكل قطعة على حدة والتي تتضمن نصوص csh وPerl.يتم تشغيل أحد هذه البرامج النصية مثل:

sudo mod args

حيث mod هو برنامج نصي Perl؛لذلك سأفعل في بيثون

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)

المشكلة هي أن هذا البرنامج النصي المعدل يحتاج إلى إجابة لبعض الأسئلة.لهذا اعتقدت أن التقليدية

(stdout, stderr) = proc.communicate(input='y')

ستعمل.لا أعتقد أنه يعمل لأن العملية التي يتحكم فيها بوبين هي sudo، وليس النص المعدل الذي يطرح السؤال.هل هناك أي طريقة للتواصل مع البرنامج النصي المعدل وتشغيله من خلال Sudo؟

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

المحلول

وسأختار أن أذهب مع Pexpect.

import pexpect
child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
child.expect ('First question:')
child.sendline ('Y')
child.expect ('Second question:')
child.sendline ('Yup')

نصائح أخرى

وأعتقد أن عليك أن إزالة sudo في الدعوة Popen وتتطلب من المستخدم من الخاصة بك النصي لكتابة sudo.

وهذا يجعل بالإضافة إلى ذلك أكثر وضوحا الحاجة إلى امتيازات مرتفعة في السيناريو الخاص بك، بدلا من إخفائه داخل Popen.

وأبسط شيء يمكن القيام به على المدى السيناريو مسيطرة (السيناريو بايثون) عبر sudo. هل أنت قادرة على أن تفعل ذلك، أم أن ذلك ليس خيارا؟

نحن بحاجة الى مزيد من المعلومات.

  1. هل Sudo يطلب منك كلمة المرور؟
  2. ما نوع الواجهة التي يمتلكها البرنامج النصي المعدل لطرح الأسئلة؟

لأنه لا يتم التعامل مع هذا النوع من الأشياء كالمعتاد عبر الأنبوب.

قد يكون الحل لكلا الأمرين بيكسبيكت, ، وهو خبير إلى حد ما في التعامل مع البرامج النصية المضحكة التي تطلب كلمات المرور ومشكلات الإدخال الأخرى المتنوعة.

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