社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Redis

为什么不能使用Expect脚本启动redis?

Qiulang • 4 年前 • 564 次点击  

我想我不能像这样启动redis的原因很简单

----更新-----

在@larsks回答了我的问题后,我意识到正是这一条导致了我的困惑:“您以一条交互语句结束它,它将您的控制台连接到您生成的进程的stdin/stdout。Redis服务器程序不是交互式的:它不接受任何控制台输入。”

我再次检查代码,发现正是这个代码让我觉得进程卡住了。

#!/usr/bin/expect -f
spawn redis-server
expect "The server is now ready to accept connections"
interact
spawn redis-cli
expect ">"
...

我从未见过redis cli运行。

但是如果我改成

#!/usr/bin/expect -f
spawn redis-server
expect "The server is now ready to accept connections"
spawn redis-cli
expect ">"
...
interact //put it in the end.

它按我的预期工作。

btw使用expect的原因是,首先要确保redis服务器启动,然后删除一些密钥。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37898
 
564 次点击  
文章 [ 1 ]  |  最新文章 4 年前
larsks
Reply   •   1 楼
larsks    5 年前

您希望第一个示例做什么?你以一个 interact 语句,将控制台连接到生成的进程中的stdin/stdout。这个 redis-server 程序不是交互式的:它不接受任何控制台输入。当你跑步时 ReDIS服务器 ,它将达到…

1135:M 18 Nov 13:59:51.634 * Ready to accept connections

…然后它停止,等待redis客户机连接并对其进行操作。另外,请注意,我使用的Redis版本以结尾 Ready to accept connections 而不是 The server is now ready to accept connections ,所以我将在下面的示例中使用它。

我们可以添加一个 puts 命令到Expect脚本,以查看它不是 在任何地方都会被卡住。如果我运行以下程序:

#!/usr/bin/expect -f
spawn redis-server
expect "Ready to accept connections"
puts "redis is running"
interact

我得到输出:

spawn redis-server
1282:C 18 Nov 14:03:33.123 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1282:C 18 Nov 14:03:33.123 # Redis version=4.0.10, bits=64, commit=00000000, modified=0, pid=1282, just started
[...]
1282:M 18 Nov 14:03:33.124 * Ready to accept connections
redis is running

所以我们可以看到它不会被卡在 spawn 语句, 甚至不在 expect 语句。

你的问题不清楚的是你为什么要使用 期待 在这种情况下,因为 ReDIS服务器 不是交互式程序 不会产生任何需要自动化的提示。