再次执行脚本时需要一个变量来保留它的值(Python)

时间:2017-01-31 09:12:27

标签: python environment-variables

目前我正在处理tweepy,我需要将tweet id存储在变量中,并希望在脚本再次运行时保留此值。我知道我可以使用文件和数据库执行此操作,但我想使用环境变量。寻找正确方向的推动。我使用命令> export en = 1从终端设置了环境变量   以下是我使用的代码:

#!/usr/bin/env python
# encoding: utf-8

import tweepy 
import time
import random
import os
t=time.time()

#my api keys 
consumer_key = "xxx"
consumer_secret = "xxx"
access_key = "xxx"
access_secret = "xxx"


toReply="xxx"
rt=['hello','hi','okay','bye']
#rt=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','you','suck','bruh',':P']
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)
ts=api.user_timeline(screen_name=toReply,count=1)
#g=open('id.txt','r')
#x=g.read()
#g.close()
x=os.environ["en"]
print x
l=[]
#print dir(ts)
#print ts.max_id
#print type(ts.max_id)
def unique(y,l):
    for i in range(0,len(l)):
        if l[i]==y:
            return 0
if int(x)!=ts.max_id:        
    for tweet in ts:
        for i in range(0,len(rt)+1):
            y=random.choice(rt)
            #print y
            if(unique(y,l)!=0):
                    #print("unique")
                    api.update_status("@" + toReply + " "+y, in_reply_to_status_id = tweet.id)
                    #print y
                    l.append(y)

    os.environ["en"]=str(ts.max_id)
    print os.environ["en"]
    '''
    f=open('id.txt','w')
    f.write(str(ts.max_id))
    f.close()
    ''' 
t1=time.time()-t
print t1

1 个答案:

答案 0 :(得分:0)

在评论中建议使用Pickle,但它有一个很大的缺点,就是你无法在Python程序之外编辑pickle。

如果您需要类似Windows .ini文件的内容,那么您想要的Python库模块就是ConfigParser,根据此回答How to read and write INI file with Python3?

另一种可能性是使用JSON(模块json)。这可能非常复杂,但如果您坚持使用单个字典的键:值对,则不是。

另一种可能性是YAML。

在所有情况下,您可能还希望atexit注册一个退出处理程序,以便在程序明确退出时保存配置变量的状态。