الثعبان، تعيين نوع المحطة الطرفية في pexpect

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

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي السيناريو الذي يستخدم pexpect لبدء برنامج CLI. وهو يعمل قليلا مثل قذيفة حيث تحصل موجه حيث يمكنك إدخال بعض الأوامر.

والمشكلة لدي، وأعتقد، هو أن يستخدم هذا البرنامج موجه الملونة.

وهذا هو ما أقوم به

import pprint
import pexpect

1 a = pexpect.spawn('program')
2 a.expect("prompt>")
3 print "---------start------------"
4 print(a.before)
5 a.sendline("command")
6 a.expect("prompt>")
7 print "---------before------------"
8 pprint.pprint(a.before)
9 print "---------after------------"
10 pprint.pprint(a.after)

وهذا هو الإخراج:

> python borken.py
---------start------------
A lot of text here from the enjoying programs start-up, lorem ipsum ...  
---------before------------
' \x1b[0m\x1b[8D\x1b[K\x1b[1m\x1b[34m'
---------after------------
'prompt>'

لسبب أول لون الترميز الفوري borkens عن أشياء وa.before في خط 8 هو مشوه، لا يعمل الطباعة العادية، حتى لو أرى أن الأمر في سطر 5 تنتج في الواقع الكثير من الانتاج.

هل أحد يعرف ما يمكن أن يكون مشكلة، أو هل من الممكن تحديد نوع المحطة الطرفية في pexpect لتجنب الألوان؟

وأستخدمه إلى tcsh قذيفة

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

المحلول

وطيب، ولقد وجدت الجواب. الجواب CSL في تعيين لي على الطريق الصحيح.

وpexpect لديه خيار "الحياة الفطرية" التي أرى أنها يمكن أن تستخدم. مثل هذا:

a = pexpect.spawn('program', env = {"TERM": "dumb"})

ولكن هذا يولد قذيفة الجديدة التي لا يعمل بالنسبة لي، بيئة التطوير يعتمد على الكثير من المتغيرات البيئية: /

ولكن إذا كنت تفعل هذا قبل وضع البيض قذيفة:

import os
os.environ["TERM"] = "dumb"

وأنا تغيير "مصطلح" الحالي و "غبية" لا تدعم الألوان، التي حددت قضية بلدي.

نصائح أخرى

وتعذر العثور على أي شيء في الوثائق pexpect للحصول على وضع المحطات، ولكن هل يمكن على الأرجح بدء البرنامج صراحة مع شركة شل، ثم قم بتعيين نوع المحطة الطرفية هناك:

shell_cmd = 'ls -l | grep LOG > log_list.txt'
child = pexpect.spawn('/bin/bash', ['-c', shell_cmd])
child.expect(pexpect.EOF)

وقد تتمكن من محاولة شيء من هذا القبيل

child = pexpect.spawn('TERM=vt100 /bin/bash', ['-c', shell_cmd])

ويمكنك أيضا بدء باش مع --norc وما شابه ذلك لتجنب قراءة ملفات التهيئة. تحقق من .

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