导入ConfigParser读取文件时的问题
简介:
我有一个.ini文件(A),里面存储了一些特定的凭据。还有多个脚本(B),比如用python、php等语言写的,它们会把这个.ini文件(A)里的内容解析成变量,并且这些脚本和.ini文件(A)在同一个文件夹里。还有一些其他的脚本(C),它们在另一个文件夹里(不是子文件夹),这些脚本不会和.ini文件(A)或解析脚本(B)在一起,它们会引入这些解析脚本(B),以便使用解析后的凭据变量。
但是,当我尝试运行一个python脚本(C),用"sudo python <_(C)_>.py"命令时,出现了“ConfigParser.NoSectionError”的错误。
在.ini文件(A)和解析脚本(B)所在的目录中,运行"sudo python"或交互式python,并引入python解析脚本(B),我可以访问解析后的凭据变量。
问题:
我哪里做错了?我觉得可能是权限的问题。
文件夹结构:
Folder_0
->Sub_Folder_0
->(A)
->(B)
->Sub_Folder_1
->(C)
(A)
[Host]
ip = 111.111.1.222
[Schema]
name = Derp_A_Der
[User]
name = root
password = SexysBack
(B)
import ConfigParser as CP;
config = CP.ConfigParser();
config.read("B.ini");
m_p = config.get("User", "password");
m_h = config.get("Host", "ip");
m_n = config.get("Schema", "name");
m_u = config.get("User", "name");
(C)
import sys;
import os;
mysql_config_path = "/Folder_0/Sub_Folder_0/";
sys.path.append( os.path.abspath(mysql_config_path) );
import mysqlConfig as myC;
print myC.m_u;
2 个回答
0
感谢pmod,我意识到我犯了一个愚蠢的错误。我还在_Sub_Folder_1_这个文件夹里。
解决方案 1:
把(C)改成...
import sys;
import os;
mysql_config_path = "/Folder_0/Sub_Folder_0/";
os.chdir(mysql_config_path);
sys.path.append( os.path.abspath(mysql_config_path) );
import mysqlConfig as myC;
print myC.m_u;
解决方案 2:
把(B)改成...
import ConfigParser as CP;
config = CP.ConfigParser();
config.read("/Folder_0/Sub_Folder_0/B.ini");
m_p = config.get("User", "password");
m_h = config.get("Host", "ip");
m_n = config.get("Schema", "name");
m_u = config.get("User", "name");
0
当找不到配置文件时,程序会使用一个空的数据集,这样就会出现一个错误,叫做 NoSectionError。在运行脚本之前,你应该先切换到配置文件所在的目录。
os.chdir(mysql_config_path)
或者在目标脚本中使用配置文件的完整路径(在 config.read() 里)。