在配置文件中使用主Python脚本的变量
我想在我的Python脚本中间使用一个配置文件。 在这个文件中,主脚本中已经初始化了一些变量 主脚本:在配置文件中使用主Python脚本的变量,python,variables,import,configuration-files,Python,Variables,Import,Configuration Files,我想在我的Python脚本中间使用一个配置文件。 在这个文件中,主脚本中已经初始化了一些变量 主脚本: # -*- coding: utf-8 -*- import imp import optparse from time import strftime, strptime from datetime import date, timedelta [...] date_mois = date_de_ref.strftime("%m") date_annee = date_de_ref.s
# -*- coding: utf-8 -*-
import imp
import optparse
from time import strftime, strptime
from datetime import date, timedelta
[...]
date_mois = date_de_ref.strftime("%m")
date_annee = date_de_ref.strftime("%Y")
date_moins2j = (date_de_ref - timedelta(days=2)).strftime("%d/%m/%Y")
date_moins7j = (date_de_ref - timedelta(days=7)).strftime("%d/%m/%Y")
imp.load_source("conf_file", "part_1.config")
import conf_file
for task in conf_file.list_tasks:
print task[1]
print "The end!"
list_tasks = [
["B", "BAT001", "Info batch 1"],
["B", "BAT002 DEBUT=21/01/2015", "Info batch 2"],
["B", "BAT003 FIN=" + date_moins2j, "Info batch 3"],
]
“part_1.config”:
# -*- coding: utf-8 -*-
import imp
import optparse
from time import strftime, strptime
from datetime import date, timedelta
[...]
date_mois = date_de_ref.strftime("%m")
date_annee = date_de_ref.strftime("%Y")
date_moins2j = (date_de_ref - timedelta(days=2)).strftime("%d/%m/%Y")
date_moins7j = (date_de_ref - timedelta(days=7)).strftime("%d/%m/%Y")
imp.load_source("conf_file", "part_1.config")
import conf_file
for task in conf_file.list_tasks:
print task[1]
print "The end!"
list_tasks = [
["B", "BAT001", "Info batch 1"],
["B", "BAT002 DEBUT=21/01/2015", "Info batch 2"],
["B", "BAT003 FIN=" + date_moins2j, "Info batch 3"],
]
如果我这样执行,我得到:
Traceback (most recent call last):
File "ordo_na.py", line 48, in <module>
imp.load_source("conf_file", "part_1.config")
File "part_1.config", line 9, in <module>
["B", "BAT003 FIN=" + date_moins2j, ""],
NameError: name 'date_moins2j' is not defined
主脚本似乎以这种方式执行了两次
如何在配置文件中使用主脚本中的变量?如果可能的话,我希望避免使用import ordo_na行,并尽可能保持配置文件最干净 顺便说一下,我使用的是Python2.6.6(我无法升级到更新的版本)
谢谢 模块是独立的,您无法从导入的模块轻松访问导入模块的变量(我认为您正在尝试这样做) 考虑: part_1.config
def get_tasks(date_moins2j):
list_tasks = [
["B", "BAT001", ""],
["B", "BAT002 DEBUT=21/13/12", ""],
["B", "BAT003 FIN=" + date_moins2j, ""],
]
return list_tasks
def get_tasks(g):
list_tasks = [
["B", "BAT001", ""],
["B", "BAT002 DEBUT=21/13/12", ""],
["B", "BAT003 FIN=" + g['date_moins2j'], ""],
]
return list_tasks
主脚本
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
print( conf_file.get_tasks("foo") )
import my_config as conf_file
pprint.pprint( conf_file.get_tasks("foo") )
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
date_moins2j = "foo"
pprint( conf_file.get_tasks(globals()) )
或者,您可以将part_1.config
重命名为类似my_config.py
,然后只需使用import
:
主脚本
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
print( conf_file.get_tasks("foo") )
import my_config as conf_file
pprint.pprint( conf_file.get_tasks("foo") )
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
date_moins2j = "foo"
pprint( conf_file.get_tasks(globals()) )
如果您不想处理显式传递参数的问题,您可以始终传递导入模块(主脚本)的全局字典,并访问该字典,那么您的文件将如下所示: part_1.config
def get_tasks(date_moins2j):
list_tasks = [
["B", "BAT001", ""],
["B", "BAT002 DEBUT=21/13/12", ""],
["B", "BAT003 FIN=" + date_moins2j, ""],
]
return list_tasks
def get_tasks(g):
list_tasks = [
["B", "BAT001", ""],
["B", "BAT002 DEBUT=21/13/12", ""],
["B", "BAT003 FIN=" + g['date_moins2j'], ""],
]
return list_tasks
主脚本
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
print( conf_file.get_tasks("foo") )
import my_config as conf_file
pprint.pprint( conf_file.get_tasks("foo") )
import imp
imp.load_source("conf_file", "part_1.config")
import conf_file
date_moins2j = "foo"
pprint( conf_file.get_tasks(globals()) )
第一个问题是,您实际上是在导入python脚本,而不是读取配置文件。您的配置文件应该是ini/json/text/pickle文件格式之一。-真正坏的消息是,如果有人在该文件中插入一些恶意python,您的文件将执行它。感谢您回答这个问题!最后,我使用@SteveBarnes建议的JSON配置文件再次编写了脚本。