我正在尝试在服务器设置中使用Redhat kickstart文件并在python中对其进行修改。我的应用程序使用python来卷曲Redhat Satellite服务器中的原始kickstart文件,然后在kickstart文件中的某些值上执行字符串替换。当我在python中卷曲文件时,它以多行字符串形式返回,这是我需要的,以便redhat kickstart正确解释文件。但是,当我通过这些框架之一(web2py,bottle,flask)返回字符串变量时,发生了某些事情,并且没有将其作为多行字符串返回,因此我需要它来保留原始文件的确切格式,而不是区域我改变。我不想将kickstart文件放在模板中,因为我是通过卫星管理文件的,如果我从Satellite卷曲文件,则它无需进行任何修改就可以进行任何修改,而无需每次进入模板。然后在模板之类的东西中,我要么返回没有模板的字符串,要么在模板文件中,我仅将1个变量作为整个kickstart文件传递给模板。
@route('/kickstart/<name>')
def kickstart(name):
ks = vula.kickstarter.kickstart.Kickstarter()
ks_file = ks.getKickstartFile()
return pystache.render('{{kickstart}}', {'kickstart': ks_file})
这是我的vula软件包中的方法。它完全按照我需要的方式返回文件。但是在此与通过框架返回该值之间又发生了一些事情。
def getKickstartFile(self):
response = urllib2.urlopen('https://my-satellite-server/core-kickstarter')
ks_file = response.read()
return ks_file
我开始使用Bottle作为框架,但发现有一条声明说它们不能够返回多行字符串,因此从头开始。我搬到了Flask,但目前Flask正在做同样的事情。我仍在学习python,可能是我做错了什么,但是我需要任何帮助才能使它正常工作。我想输出多行字符串。我了解您使用
""" or ''' 用于多行字符串,但是即使这样做并通过框架将其发送,它仍将作为连续的一行打印到屏幕上。我究竟做错了什么?作为最后的选择,如果我无法输出多行字符串,我将被迫将kickstart文件放入模板中。
ottle和Flask都可以处理多行字符串。您的问题是,text/html默认情况下会将数据解释为数据,并且在HTML中,空白的任何组合在显示时都会折叠为一个空格。为了确保您的数据与发送的数据完全一样,您需要将Content-Type标头设置为text/plain。
在烧瓶中:
# If you want *all* your responses to be text/plain
# then this is what you want
@app.after_request
def treat_as_plain_text(response):
response.headers["content-type"] = "text/plain"
return response
# If you want only *this* route to respond
# with Content-Type=text/plain
@app.route("/plain-text")
def a_plain_text_route():
response = make_response(getKickstartFile())
response.headers["content-type"] = "text/plain"
return response
瓶装:
@route("/plain-text")
def plain_text():
response.content_type = "text/plain"
return """This
multi-line string
will show up
just fine"""
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。