我对Python(从3.0)基于unicode的标准库的行为方式感到有些困惑.诸如CGI和urllib之类的模块是否会使用unicode字符串,还是会使用新的"字节"类型并只提供编码数据?
我怎样才能找到我的python cgi收到的http请求?我需要HEAD和GET的不同行为.
谢谢!
Perl在FCGI模式下的函数我有一个奇怪的行为.新线不会被追加.为什么会这样?
示例代码:
#!/usr/bin/perl -wT
use strict;
use warnings;
use utf8;
use feature qw( say );
use FCGI ();
use CGI qw( header );
my $cnt = 0;
my $req = FCGI::Request();
while ( $req->Accept() >= 0 ) {
$cnt++;
print header( -type => 'text/plain', -charset => 'utf-8' );
say "Hello, world #$cnt";
print "\n";
print "$$\n"
print 'Test 1234';
}
Run Code Online (Sandbox Code Playgroud)
预期结果(以及通过控制台的实际结果):
Content-Type: text/plain; charset=utf-8
Hello, world. #1
6712
Test 1234
Run Code Online (Sandbox Code Playgroud)
通过Apache/FCGI的实际结果:
Content-Type: text/plain; charset=utf-8
Hello, world. #3
6709
Test 1234 …Run Code Online (Sandbox Code Playgroud) 我创建了一个使用Python CGI脚本的简单应用程序.我有一个工作的本地版本(适用于lighttpd),但现在我想将它上传到Heroku.该应用程序由2或3个脚本组成,这些脚本对文件进行操作并将信息打印回浏览器,因此我认为除了CGI之外我不需要任何模块.
但是Heroku文档只解释了如何使用花哨的Web框架上传Python应用程序,而我没有使用任何这些.
我想知道是否可以在Heroku上运行CGI脚本,如果可以的话,该怎么做.
我有一个相对较大的传统Perl/CGI/DBI Web应用程序,它可以一个接一个地生成HTML.我们正在重新制作正在生成的HTML,以符合HTML 5/CSS 3.这是转向某种模板系统的好时机.我们不想进行完全重写,因此不希望迁移到Catalyst等框架.
我认为Perl模板工具包可能是我们影响最小的手段.我正在重读"古老的Badger Book"以研究可行性.
我的问题是这个.有没有人在这里将"旧学校"Perl Web代码迁移到Template Toolkit?您是否有任何技巧可以分享,以尽量减少重写/返工?我们还没有100%决定使用Template Toolkit.如果有替代方案我们应该考虑?
具体来说,我们试图解决什么问题?我们正在生成无效的HTML并需要清理它.由于我们正在清理,我们希望生成完全有效的HTML 5,并且在可行的范围内,生成有效的CSS3和Javascript.我们通过jQuery使用jQuery,jQuery UI小部件和AJAX.我们有典型的页面控制器MVC架构,除了没有View层.我们想去某种模板系统,但不想重写所有东西(或许多东西!)进行迁移.
谢谢!Ed Barnard,Cannon Falls MN
我见过CGI/Perl的每个例子基本上是一堆包含HTML的打印语句,这似乎不是编写CGI应用程序的最佳方式.有一个更好的方法吗?谢谢.
编辑:我决定使用CGI :: Application和HTML :: Template,并使用以下教程: http://docs.google.com/View?docid=dd363fg9_77gb4hdh7b.谢谢!
Moose是一个梦幻般的对象框架.麻烦的是,与它的依赖关系一起,它是非常大的.我们的分析表明,在我们的平台上,只需加载Moose就会在非持久性CGI应用程序脚本上产生5-6秒的开销.这对于这些一次性应用程序来说是不可接受的.
相比之下,当我们使用持久性流程系统(例如FCGI)时,这种启动开销被消除(或者更确切地说,只发生一次),一切都很顺利.我们遇到的问题是我们无法保证所有代码都始终在持久进程下运行.
我们调查使用鼠标作为Moose的功能有限的替代品,但事实证明(如本答案所述)这不是一个可行的选择.我们编写的任何与Moose一起工作的库都无法以微妙但重要的方式使用Mouse.而且我们真的不想分叉我们所有的模块,以便我们可以在持久环境中支持Moose,而在"vanilla"CGI中支持Mouse.
鉴于此,我们有以下选择:
哪个选项最好?我们现在正倾向于2,如果我们必须得到像香草CGI一样的东西,我们就会把它吸收.其他框架怎么样?我们应该关注哪些更轻量级的东西?
我想关闭STDOUT以防止我的代码输出我需要进一步计算但不想在我的网页上的特定图像.
所以我想关闭STDOUT,做我必须做的代码,然后重新打开STDOUT将内容输出到网页.(不是文件)
我尝试的是:
close STDOUT;
# my code here
open STDOUT;
Run Code Online (Sandbox Code Playgroud)
这不起作用......
谢谢
我使用Flask框架编写了一个小应用程序.我尝试使用cgi来托管这个.在文档之后,我创建了一个包含以下内容的.cgi文件:
#!/usr/bin/python
from wsgiref.handlers import CGIHandler
from yourapplication import app
CGIHandler().run(app)
Run Code Online (Sandbox Code Playgroud)
运行该文件会导致以下错误:
...
文件"/usr/lib/pymodules/python2.7/werkzeug/routing.py",第1075行,在bind_to_environ中wsgi_server_name = environ.get('HTTP_HOST',environ ['SERVER_NAME'])
KeyError:'SERVER_NAME'
状态:500内部服务器错误
内容类型:text/plain
Content-Length:59
在我的应用程序中,我设置:
app.config['SERVER_NAME'] = 'localhost:5000'
Run Code Online (Sandbox Code Playgroud)
当我使用Flask开发服务器运行应用程序时,它运行得非常好.你可以告诉我,我对这些东西很新,我已经找到了其他有类似错误但没有运气的人.所有帮助表示赞赏.
我想在共享托管环境中运行Python CGI.我按照Flask的例子,提出了一个小应用程序,如下所示:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
@app.route("/pi")
def pi():
return "3.1416"
if __name__ == "__main__":
app.run()
Run Code Online (Sandbox Code Playgroud)
我的.htaccess包含:
Options +ExecCGI
AddHandler cgi-script .cgi .py .rb
DirectoryIndex index.cgi index.htm
Run Code Online (Sandbox Code Playgroud)
我的index.cgi是
#!/usr/bin/env python
from wsgiref.handlers import CGIHandler
from firstflask import app
CGIHandler().run(app)
Run Code Online (Sandbox Code Playgroud)
它成功地将该路径映射/到index(),但它未能映射路径/pi来pi(),而不是返回404错误.我想我会错过一些明显的东西.谢谢您的帮助.