Python Fabric:如何回答键盘输入?

时间:2010-02-11 17:26:15

标签: python automation fabric

我想自动响应某些程序提示的一些问题,比如mysql提示输入密码,或者当我想用./manage重建我的haystack索引时要求'是'或... .py rebuild_index。

对于MySQL,我可以使用--password =开关,我确信apt有一个'安静'的选项。但是如何将响应传递给其他程序呢?

6 个答案:

答案 0 :(得分:36)

如果您正在寻找用户确认操作,请使用确认方法。

if fabric.contrib.console.confirm("You tests failed do you want to continue?"):
  #continue processing

或者,如果您正在寻找从用户那里获得输入的方法,请使用提示方法。

password = fabric.operations.prompt("What is your password?")

答案 1 :(得分:13)

为什么不能只使用pipes

例如,对于自动自动接受,只需使用yes即可输出无休止的y流。

yes | rm *.txt

http://upload.wikimedia.org/wikipedia/en/thumb/f/f6/Pipeline.svg/280px-Pipeline.svg.png

答案 2 :(得分:1)

这两种方法都有效且有效。

我选择第一个,因为我不想与我的部署系统进行任何交互。

所以这是我使用的解决方案:

% yes | ./manage.py rebuild_index

WARNING: This will irreparably remove EVERYTHING from your search index. Your choices after this are to restore from backups or rebuild via the rebuild_index command. Are you sure you wish to continue? [y/N] Removing all documents from your index because you said so. All documents removed. Indexing 27 Items.

答案 3 :(得分:1)

Fabric(1.0a)的开发版现在支持与远程程序的交互。 http://docs.fabfile.org/1.0a/usage/interactivity.html

答案 4 :(得分:0)

迟到的答案,但希望这可以帮助有类似问题的人们。

不同点:

  1. 向控制台回复 两个或更多不同的输入
  2. parallel mode支持。
  3. 包含任何类型的输入yes/no/y/n
  4. 问题

    [hostxxx] out: Type 'c' if you want to use the Commercial Edition.
    [hostxxx] out: Type 'o' if you want to use the Open Source Edition.
    [hostxxx] out: Type '3' to view the GNU General Public License version 3.
    [hostxxx] out: Type 'L' to view the Lesser GNU General Public License version 2.1.
    [hostxxx] out: Type 'yes' to accept this license offer.
    [hostxxx] out: Type 'no' to decline this license offer.
    

    解决方案:

    使用printf代替yes来增加更多灵活性,同时这就像parallel模式下的魅力一样。

    @parallel
    def demo_multi_input():
        run('printf "o\nyes\n"|./configure --prefix=/home/work/bin/qt')
    

答案 5 :(得分:-1)

使用此代码:

run("echo yes|./manage.py rebuild_index")