检查 redis get key 是否可用,if else python 脚本

Check redis get key available, if else python script

我目前正在为我自己的 3d 打印机使用 redis 设计一个自动 FIFO 队列,我是 python 脚本和 redis 的新手。如果您有更好的想法,我们将不胜感激。

我在创建 python 脚本来检查键值是否可用时遇到问题。

目前我的python脚本是

import redis
import os
import time

r = redis.StrictRedis(host='172.16.114.54', port=6379, db=0)

if r.lrange('stlfile',0 ,0) == None:
        print 'there is no key'
else:
        print r.lrange('stlfile',0 ,0)

输出:

root@user:~/scripts# python autoslice.py
['172.16.114.162/registered/uploads/teemo.stl']

而我的 redis 有这些值

172.16.114.54:6379> lrange stlfile 0 -1
1) "172.16.114.162/registered/uploads/teemo.stl"
2) "172.16.114.162/registered/uploads/hunter_knife.stl"

我目前可以执行 r.lrange('stlfile', 0,0) 并且我的第一个键值将输出。

第一个问题: 我如何做一个 python 脚本来检查值是否存在或 'nil' 出现?我应该做一个字符串检查吗?

第二个问题:我的值r.lrange('stlfile',0,0)出现了,这是我想要的,但没有['xxx'](引号),我如何自动删除它们? (只留下xxx值)

我试过用这个删除我的报价但无济于事 python How can I strip first and last double quotes

string = string[1:-1]

>>>r = redis.StrictRedis(host='172.16.114.54', port=6379, db=0)
>>>string = r.lrange ('stlfile', 0, 0)
>>>x = string[1:-1]
>>>print x
[]

不太清楚为什么我的输出是 [] 而不是不带引号的字符串

1) 您可以根据 None

测试您的 return 值
if key_value == None:
   print 'there was no key'
else:
   print 'key_value was', key_value

2) 是什么让您认为 returned 值有引号?你确定是这样吗?看看这个:

    ~ mgregory$ python
Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> one = "a"
>>> print one
a
>>> one
'a'
>>> result = [one]
>>> print result
['a']
>>> value = result[0]
>>> print value
a
>>> 

请注意,从 redis.StrictRedis() 中 return 得到的值不是字符串,而是数组。

我们知道这一点,因为 x 是一个数组 - 当您最终打印它时它是一个空数组。

它为空并不奇怪,因为它从一个元素开始,然后从中减去两个元素。

如果你真的认为来自redis的项目确实有引号,那么你需要做

result = r.lrange ('stlfile', 0, 0)
string = result[0]
x = string[1:-1]
print x

我预测这会导致您的字符串缺少第一个和最后一个字符 - 我不认为来自 redis 的结果中实际上有引号。

也许您的问题的核心是您认为结果是一个字符串,而实际上它是一个数组....