导入ConfigParser读取文件时的问题

0 投票
2 回答
1179 浏览
提问于 2025-04-30 05:57

简介:
我有一个.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() 里)。

撰写回答