2010-07-15 51 views
1

我有一个Python程序可以启动脚本如下:如何模拟sys.argv中[1:]基于Web蟒蛇

if __name__ == "__main__": 
    main(sys.argv[1:]) 

要运行此,我必须使用shell或终端这样:

myscript somefile.xml 

该脚本接受一个文件,然后完成所有其余的工作。 现在,我试图在Web服务器上运行该程序。

因此,我使用HTML表单将该文件提交给此脚本。 在我的Python脚本,我做的是这样的:

.... 
elif req.form.has_key("filename"): 
    item=req.form["filename"] 
    if item.file: 
     req.write("I GO HERE") 
     myscript.main(item) 
.... 

正如你可以看到这里,我想将文件直接发送到“主”功能。 这是正确的方法吗?

我没有得到任何脚本错误,但Python脚本没有产生预期的结果。

任何帮助? 谢谢

+0

您正在使用什么框架?或者它是一个CGI脚本?而实际上发生了什么? – 2010-07-15 06:51:42

回答

1

将上传的文件内容写入临时文件(使用tempfile.mkstemp()),并将临时文件的文件名传递到包装在列表中的main()

例如(未经测试):

import os 
import tempfile  

fd, temp_filename = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, "wb") as f: 
     # Copy file data to temp file 
     while True: 
      chunk = item.file.read(100000) 
      if not chunk: break 
      f.write(chunk) 

     # Call script's main() function 
     myscript.main([temp_filename]) 
finally: 
    os.remove(temp_filename) 
+0

感谢您的回复, 但我在这里得到一个语法错误: 与os.fdopen(fd,“wb”)作为f: – ssdesign 2010-07-15 07:20:08

+0

什么版本的Python?您可能需要在文件顶部添加'from __future__ import with_statement'。 – 2010-07-15 07:28:47

+1

复制循环后需要使用'f.flush()'以确保内部IO缓冲区被刷新,并且所有数据都被写入文件。此外,代码可以通过使用'tempfile.NamedTemporaryFile'和'shutil.copyfileobj'来简化。 – lunaryorn 2011-04-07 09:50:09