我想自动响应某些程序提示的一些问题,比如mysql提示输入密码,或者当我想用./manage重建我的haystack索引时要求'是'或... .py rebuild_index。
对于MySQL,我可以使用--password =开关,我确信apt有一个'安静'的选项。但是如何将响应传递给其他程序呢?
答案 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)
迟到的答案,但希望这可以帮助有类似问题的人们。
不同点:
yes/no/y/n
。的问题强> 的
[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")