Запросы Python Fabric: странное поведение с «less» и raw_input

У меня есть задача ткани, которая выглядит так:

@task
def test():
    with settings(prompts={'This is a test.': 'q', 'question?':'answer'}):
        run("python test.py")

мой скрипт test.py выглядит так:

import subprocess, os
subprocess.call(['less', '-e', os.path.abspath('test.txt')])
response = raw_input("A question?")
print("response is [{0}]".format(response))

И test.txt содержит:

This is a test.

Если я запускаю это и добавляю несколько отпечатков в ткань, чтобы посмотреть, что происходит, действительно при чтении файла ткань находит текст, вводит q. Затем он останавливается на raw_input, отправляет ответ. Но raw_input получает "" в качестве ответа вместо ответа!!

Если я уберу 'вопрос?':'ответ' из своего диктофона подсказок и введу ответ вручную, опять же, он как-то проглотится...

Однако, если я удалю «Это тест.»: «q» и выйду из команды less вручную, ручной или автоматический ответ для raw_input снова сработает.

Как я могу выйти меньше, чтобы мои последующие ответы не были проглочены? Конечно, я упростил сценарий из реальной жизни, когда я не могу изменить эти файлы...


person Kevin Eaverquepedo    schedule 02.11.2017    source источник
comment
Я использую python 2.6 и python 2.7 и ткань 1.13.2.   -  person Kevin Eaverquepedo    schedule 02.11.2017


Ответы (1)


это должно быть связано с терминалом и интерактивным режимом + меньше поведения по этому поводу.

Добавьте pty=False к вашим аргументам run(..), и это должно решить вашу ситуацию.

person gst    schedule 02.11.2017
comment
также в документах docs.fabfile.org/en/1.14/usage/interactivity. .html В ситуациях, требующих отключения поведения pty, можно использовать аргумент командной строки --no-pty и переменную окружения always_use_pty. - person Kevin Eaverquepedo; 03.11.2017