Virtuozzo والأوامر الأتمتة مع العمليات الفرعية لـ Python
-
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
قد يناسب الفاتورة.
لا تنتمي إلى StackOverflow