0

我有一个看起来像这样的织物任务:

@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.

如果我运行它,并在 fabric 中添加一些打印以查看发生了什么,实际上当读取文件 fabric 找到文本时,输入 q。然后它在 raw_input 上停止,发送响应。但是 raw_input 得到 "" 作为答案而不是响应!

如果我从提示字典中删除 'question?':'answer' 并手动输入答案,它会以某种方式被吞下......

但是,如果我删除 'This is a test.': 'q' 并手动退出 less 命令,则 raw_input 的手动或自动响应都会再次起作用。

如果我随后的答案被吞没,我怎样才能少退出?当然,我简化了一个无法更改这些文件的现实生活场景......

4

1 回答 1

2

这必须与终端和交互模式有关+较少的行为。

添加pty=False到您的run(..)论点中,这应该可以解决您的情况。

于 2017-11-02T22:14:33.340 回答