Как симулировать sys.argv [1:] на веб-питоне - PullRequest
1 голос
/ 15 июля 2010

У меня есть программа на Python, где сценарий инициализации выглядит следующим образом:

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

Чтобы запустить это, я должен использовать Shell или Terminal следующим образом:

myscript somefile.xml

Сценарийпринимает файл, а затем выполняет всю остальную работу.Сейчас я пытаюсь запустить эту программу на веб-сервере.

Поэтому я использую форму HTML для отправки файла в этот скрипт.В моем скрипте Python я делаю так:

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

Как вы можете видеть здесь, я пытаюсь отправить файл напрямую в функцию "main".Это правильный способ сделать?

Я не получаю никакой ошибки скрипта, но скрипт Python не дает ожидаемых результатов.

Любая помощь?Спасибо

1 Ответ

1 голос
/ 15 июля 2010

Запишите содержимое загруженного файла во временный файл (используя 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...