2011-08-15 33 views
3

我正在构建一个服务,它有几个正在运行的cronjobs,用Python编写。不过,这是我的第一个Python项目,所以我仍然是一个初学者。包含.py文件,仍然不会破坏cronjob(Python,初学者)?

我现在正在做的是我的数据库连接在每个文件上处理,所以基本上如果我想更改主机,我需要浏览所有文件。我现在正在研究一种类似Python的PHP- include()方法,这样我就可以包含一些常规的东西而不是复制粘贴。

此外,Python的文件都跑了的cronjob,因此该方法应该cronjobs工作太:)

+0

您可以导入具有全局值的模块:http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-them – gimel

回答

3

如果它真的只是一个几个数据库连接的设置,只需将它放入一个Python模块并将其导入到所有文件中即可。为什么添加任何你不需要的复杂性?

如果它更复杂,请使用ConfigParser作为@AdamMatan建议。

# dbconfig.py 
host = '127.0.0.1' 
user = 'stack' 
password = 'overflow' 

# db.py 

import dbconfig 
print dbconfig.host 
print dbconfig.user 
print dbconfig.password 
+1

这是一个好的开始(+1)。将配置放入Python模块的问题是,它可能会被视为简单的配置问题,并将责任交给非程序员,他们不理解Python的语法或空白的意义,从而导致问题与生产系统。 – Johnsyweb

+0

如果它真的和我上面的例子一样简单,你怎么能把空白搞乱?当然,如果您开始必须仔细选择是使用单引号还是双引号,因为需要引用值,现在是切换到其他格式的时候了。 – agf

+1

@agf通过尝试缩进部分,例如。 –

1

使用外部configuration file,用你的数据库连接(主机,名称,密码,数据库,... ),并从Python脚本中读取配置文件。

这使得更改变得很容易(即使对于非程序员)也很好地符合Single Choice Principle

例子:

db.cfg

[db] 
host=127.0.0.1 
user=stack 
password=overflow 

db.py

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.readfp(open('db.cfg')) 

print config.get('db', 'host') 

执行结果:

127.0.0.1 
0

如果您需要致电__import__(),那么您就错了。

您需要需要refactor您的代码,以便您不再有散布在整个代码库中的数据库连接例程。是的,将这些详细信息放在配置文件(+1 @Adam Matan)中会更好,但首先您需要消除重复。这将为你节省一个长期痛苦的世界。