Сохранение временных файлов с помощью CGI (Ubuntu) - PullRequest
2 голосов
/ 02 июля 2011

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

Мне бы очень хотелось, чтобы люди запускали эту программу через интерфейс формы CGI.Поскольку я больше не студент, у меня больше нет веб-пространства с аккуратным маленьким подкаталогом cgi-bin, который идеально подключен.

Я написал простую программу на CGI Python несколько лет назад и пытался использоватьэто как шаблон.

Вот мой вопрос: моей программе необходимо создавать временные файлы (при запуске из командной строки она сохраняет изображения по заданному пути).Я прочитал несколько учебных пособий по Apache и т. Д. И запустил много вещей, но я не могу понять, как позволить моей программе записывать временные файлы (я также не знаю, где эти файлы будут жить и т. Д.),Каждый раз, когда я пытаюсь записать файл (каким-либо образом) в моей программе на Python, CGI «вылетает» и, кажется, не в порядке.

Меня не очень беспокоит безопасность, потому что временные файлы будут толькобыть выходами программы (а не пользовательским вводом).

И пока я спрашиваю (я предполагаю, что вы вроде ниндзя CGI, если вы зашли так далеко и не скучали), сделайтеВы знаете, что моя CGI-программа может принимать аргумент файла без создания временного файла?

Мой предыдущий подход к этому состоял в том, чтобы просто взять список текста в качестве аргумента:

try:
    if item.file:
        data = item.file.read()
        if check:
            Tools_file.main(["ExeName", "-d", "-w " + data])
        else:
            Tools_file.main(["ExeName", "-s", "-d", "-w " + data])
...

Я бы хотел сделать это в правильном направлении !Заранее привет.

Стек переполнен твоим,
Оливер

Ответы [ 2 ]

3 голосов
/ 02 июля 2011

Что ж, «правильный» способ - это, вероятно, переделать вещи, используя существующий веб-фреймворк, такой как Django.Это, вероятно, излишне в этом случае.Не стоит недооценивать аспекты безопасности здесь.Они, вероятно, более актуальны, чем вы думаете.

При всем этом вы, вероятно, захотите использовать модуль временных файлов Python из стандартной библиотеки:Как правило, вы напишете что-нибудь в / tmp / что угодно, если вы используете unix.Если ваша программа дает сбой только при запуске под Apache (но работает нормально, когда вы выполняете ее напрямую), проверьте свои разрешения.Убедитесь, что у вашего пользователя apache есть разрешение на запись туда, где вы решили хранить временные файлы.Убедитесь, что временные файлы записаны с соответствующими разрешениями (не хотите писать файл, который вы не сможете прочитать позже).

1 голос
/ 02 июля 2011

Как сказал Пол Макмиллан, используйте временный файл:

 temp, temp_filename = tempfile.mkstemp(text = True)
 temp_output = os.fdopen(temp, 'w')
 temp_output.write(something_or_other)
 temp_output.close()

Мое личное мнение заключается в том, что фреймворки требуют больших затрат времени, если вам действительно не нужны предварительно созданные функции.CGI намного проще и может работать для вашего приложения, по крайней мере, до тех пор, пока оно не станет действительно популярным.

...