我目前正在为我自己的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
[]
不太清楚为什么我的输出是[]而不是没有引号的字符串
答案 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中的结果实际上有引号。
你的问题的核心可能就是你认为结果是一个字符串,而实际上它是一个数组....