我试图从一个类的python中的config file
中读取一些值,然后试图在同一类的另一个函数中访问这些变量。我尝试了下面的代码,但是我的代码似乎有问题。
这是我尝试过的:
class CLEAN():
def __init__(self):
parser = argparse.ArgumentParser(description='Remove inactive users from artifactory')
parser.add_argument('-f', '--config_file', dest='config_file', default="", required=True, action="store", help='the config file with creds')
parser.add_argument('-d', '--log_dir', dest='log_dir', default="", required=True, action="store", help='the logs dir')
parsers = parser.parse_args()
self.config_file = parsers.config_file.strip()
self.log_dir = parsers.log_dir.strip()
if not os.path.exists(self.log_dir):
os.mkdir(self.log_dir)
with open('config.ini', 'r') as myfile:
for line in myfile:
if 'instance' in line:
instance = line.split('=')[1]
if 'user' in line:
user = line.split('=')[1]
if 'user_api' in line:
user_api = line.split('=')[1]
def print_values(self):
logger.info(self.instance)
logger.info(self.user)
logger.info(self.user_api)`
这部分代码后跟main() 我得到的错误是
Traceback (most recent call last):
File "clean.py", line 48, in <module>
c.main()
File "clean.py", line 44, in main
self.print_values()
File "clean.py", line 39, in print_values
logger.info(self.instance)
AttributeError: CLEAN instance has no attribute
'instance'
cat config.ini
instance=xxxxx
user=abc
user_api=xxxx
答案 0 :(得分:2)
您需要添加self.
:
self.instance = line.split('=')[1]
与user
和user_api
相同。
另一方面,如果您不打算在该方法之外使用这些变量,则self
或config_file
不需要log_dir
。
正如bruno所说,使用ConfigParser:
from configparser import ConfigParser
config = ConfigParser()
config.read('config.ini')
print(config['section']['instance']) # xxxxx
这需要在配置文件的顶部添加一行[section]
。任何标题都可以,但是必须有节标题。
然后您可以self.config = config['section']
并以self.config['instance']
的形式访问这些值。
答案 1 :(得分:0)
这里:
with open('config.ini', 'r') as myfile:
for line in myfile:
if 'instance' in line:
instance = line.split('=')[1]
if 'user' in line:
user = line.split('=')[1]
if 'user_api' in line:
user_api = line.split('=')[1]
您正在创建局部变量,而不是实例属性。您必须将self.user self.instance
self.user_api`分配给and
。
此外,在您当前的代码中,没有保证将设置这些属性(如果在文件中未找到“ user”,“ user_api”或“ instance”字样),因此您要首先设置这些属性默认值,即:
# which default value makes sense is up to you
self.instance = None
self.user = None
self.user_api = None
with open('config.ini', 'r') as myfile:
for line in myfile:
if 'instance' in line:
self.instance = line.split('=')[1]
if 'user' in line:
self.user = line.split('=')[1]
if 'user_api' in line:
self.user_api = line.split('=')[1]
此外,python has a ConfigParser
class知道如何处理ini文件,因此最好使用此文件。