在网页上执行Python程序
我可以用 os.system()
或 subprocess.call()
来在网络服务器上执行一个Python程序吗?
我的意思是,我能不能在一个.py脚本里写这些函数,然后从网页浏览器运行它,期待程序能被执行?
非常感谢。
编辑:
抱歉让大家困惑了,我想给你们更多关于我问题的背景。
我之所以想这样做,是因为我有一个Python程序,它可以接受一个XML文件,并返回一个TTF文件。
我在终端里是这样运行这个程序的:
ttx somefile.xml
运行后,它会完成所有工作并生成一个ttf文件。
现在,当我把这个脚本作为模块部署到网络服务器上时,我使用一个表单让用户浏览并选择XML文件。
然后我把文件数据读到一个临时文件里,再把这个文件传给模块脚本执行,像这样:
ttx.main([temp_filename])
这样做对吗?因为到目前为止,我在日志或浏览器里没有看到任何错误,只是一个空白的屏幕。
当这个方法不奏效时,我打算尝试 os.system
或 subprocess.call
。
5 个回答
是的,我经常这样做。你可以像平常一样导入,先把你的 .py 文件放到 cgi-bin 文件夹里,然后确保服务器能够处理 Python 代码。
你不应该用 os.system 或 subprocess.call 来执行 CGI 进程。
也许你可以看看这里的 Python CGI 教程:
http://www.cs.virginia.edu/~lab2q/
如果你想让你的 CGI 进程和本地机器上的其他进程进行通信,你可以了解一下 Python 的“REST 框架”。
只要你的服务器设置好可以运行CGI脚本(比如Apache的相关文档可以在这里找到),那么你就可以从网页服务器上执行Python脚本。只需确保脚本放在正确的cgi-bin/目录下,并且文件在服务器上有可执行权限。
关于你的评论:
- 如果你真的想的话,可以明确允许服务器上的其他文件夹运行可执行代码。我不知道你用的是什么服务器,但在Apache上,你可以通过为你想要的文件夹设置
Option +ExecCGI
来实现。再次提醒,可以查看我提供的文档。 - 你需要提供一个绝对路径,指向服务器上的位置。举个例子,我开发的网站结构是:/public_html/cgi-bin/。当我想访问.cgi或.py文件时,网站的URL大概是http://chess.narnia.homeunix.com/cgi-bin/index.cgi。如果需要的话,你也可以设置重定向到某些文件。
- 通过浏览器传递参数的一种方法是将它们附加到URL后面,就像HTTP POST方法那样。这是一个很好的示例。
这就是你想要问的问题吗,还是你想用os.system()
来真正“调用”Python脚本?