1

我在 django 视图中有以下代码。

full_path = BASE_DIR + '/' + full_path
print(full_path)
ksinput_path = full_path + '/KSINPUT'
print(ksinput_path)
import configparser
parser = configparser.ConfigParser()
print(parser)
data = open(ksinput_path, 'r')
print(data)
parser.read_file(data)
print(parser.sections())
dhcp_network = parser.get('NETWORKING', 'DHCP_NETWORK')
ethernet_device = parser.get('NETWORKING', 'ETHERNET_DEVICE')
ip_address = parser.get('NETWORKING', 'IP_ADDRESS')
netmask = parser.get('NETWORKING', 'NETMASK')
gateway = parser.get('NETWORKING', 'GATEWAY')
hostname = parser.get('NETWORKING', 'HOSTNAME')
domain_name = parser.get('NETWORKING', 'DOMAIN_NAME')

if dhcp_network == 'No':
    NETWORK_LINE = "network --bootproto=static --device="+ethernet_device+" --ip="+ip_address+" --netmask="+netmask+" --gateway="+gateway+" --nameserver=10.19.21.40 --hostname="+hostname+"."+domain_name
else:
    NETWORK_LINE = "network --bootproto=dhcp --device="+ethernet_device

f = open(os.path.join(full_path, '/output'), 'w+')
f.write("Created iso with " + full_path +" and " + NETWORK_LINE + '\n')
f.write("This line intentionally left blank.")
f.close()

当我运行此代码并打印出重要的行时,我在控制台上得到以下输出

/Users/jason/Desktop/kickstart_python/ks/myhostname.mydomain.com
/Users/jason/Desktop/kickstart_python/ks/myhostname.mydomain.com/KSINPUT
<configparser.ConfigParser object at 0x111cea828>
<_io.TextIOWrapper name='/Users/jason/Desktop/kickstart_python/ks/myhostname.mydomain.com/KSINPUT' mode='r' encoding='UTF-8'>
[]

所有这些路径都是准确的。这是 KSINPUT 文件的内容

[NETWORKING]
ETHERNET_DEVICE=eth0
HOSTNAME=myhostname
DOMAIN_NAME=mydomain.com
IP_ADDRESS=1.2.3.4
NETMASK=255.255.255.0
GATEWAY=3.4.5.6
DHCP_NETWORK=No

当我从 django 视图运行它时,我得到

Exception Type: NoSectionError
Exception Value:    No section: 'NETWORKING'

但是,当我在 django 应用程序的虚拟环境的 python shell 中运行它时,它可以工作:

Python 3.4.1 (default, May 19 2014, 13:10:29)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import configparser
>>> parser = configparser.ConfigParser()
>>> data = open("/Users/jason/Desktop/kickstart_python/ks/myhostname.mydomain.com/KSINPUT", 'r')
>>> parser.read_file(data)
>>> parser.sections()
['NETWORKING']
>>>

我一直在努力解决这个问题,但无法弄清楚问题出在哪里。有人看到明显的错误吗?

非常感谢。

4

1 回答 1

0

ConfigParser() 查找的任何 .ini 文件都应该直接位于 Django 项目下。只有这样 Django 才能加载。因此,每个应用程序的 ini 文件名应该不同,因为它们直接位于项目之下。

希望它可以帮助某人。我真的头破了!:-)

于 2019-09-25T03:51:53.473 回答