检查redis获取密钥,如果是python脚本

时间:2015-04-15 04:23:58

标签: python redis

我目前正在为我自己的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 个答案:

答案 0 :(得分:1)

1)您可以针对None

测试返回值
if key_value == None:
   print 'there was no key'
else:
   print 'key_value was', key_value

2)是什么让你认为你认为返回的值有引号?你确定它确实如此吗?看看这个:

    ~ 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()返回的值不是字符串,而是数组。

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

它的空白并不奇怪,因为它以一个元素开头,然后你从中减去了两个元素。

如果您真的认为来自redis的商品确实有引号,那么您需要做

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

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

你的问题的核心可能就是你认为结果是一个字符串,而实际上它是一个数组....