我目前正在为我自己的 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
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 的结果中实际上有引号。
也许您的问题的核心是您认为结果是一个字符串,而实际上它是一个数组....
关于python - 检查 redis get key 是否可用,否则 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29641563/