Virtuozzo والأوامر الأتمتة مع العمليات الفرعية لـ Python

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

  •  02-10-2019
  •  | 
  •  

سؤال

أنا أتعامل مع خادم Virtuozzo وأريد أتمتة تسجيل الدخول إلى كل حاوية وإصدار بعض الأوامر في Python من خلال إنشاء عملية فرعية لـ "VZCTL Enter".

إليكم المقتطف الذي أعمل عليه الآن -

#!/usr/bin/python

import subprocess

print 'Start'
proc = subprocess.Popen(['vzctl enter 123'], 
                             stdout=subprocess.PIPE, 
                             stdin=subprocess.PIPE,
                             shell=True)
print proc.communicate('whoami')[0]
print 'Finished'

لكن الإخراج الذي أراه في كل مرة هو -

Unable to get term attr: Invalid argument
Unable to restore term attr: Invalid argument

أعتقد حقًا أن هذا خطأ باش ، هل يمكن لأي شخص أن يعطيني اقتراحًا؟

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

المحلول

يبدو أن VZCTL يتوقع أن يكون stdin/stdout محطة. يمكنك معرفة أي من خلال التجربة (في باش):

$ echo whoami | vzctl enter 123  # stdin is not a tty

$ vzctl enter 123 | cat          # stdout is not a tty
whoami
<ctrl-d>

يمكنك استخدام ال pty الوحدة النمطية من المكتبة القياسية لإنشاء pseudottys ، ولكن تلك الوحدة منخفضة للغاية.

هناك وحدة طرف ثالثة تسمى pexpect قد يناسب الفاتورة.

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