Django: запустить команду Unix с помощью Django? - PullRequest
2 голосов
/ 25 марта 2010

Извините, если это дубликат - не удалось найти ответ с помощью поиска.

Как запустить команду Unix из файла представлений Django? Я хочу запустить команду 'cp', чтобы скопировать только что загруженный файл.

Заранее спасибо.

Ответы [ 6 ]

10 голосов
/ 25 марта 2010

Почему командная строка cp?

Используйте взамен встроенный Python copyfile(). Портативный и гораздо менее подвержен ошибкам.

import shutil
shutil.copyfile(src, dest)
3 голосов
/ 25 марта 2010

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

import subprocess    
subprocess.Popen('cp file1 file2',shell=True).wait()

Модуль подпроцесса является заменой os.system и других более старых модулей и функций, см. http://docs.python.org/library/subprocess.html

Конечно, если вам нужно просто скопировать файлы, вы можете использовать более удобную функцию copyfile из модуля shutil

1 голос
/ 19 апреля 2011

Я бы использовал iterpipes , что уменьшает "По бороде Хемидалла, какой грязный синтаксис!" человек склонен думать при работе с подпроцессом.

1 голос
/ 25 марта 2010

В Python:

import os
if os.system("cp file1 file2") == 0:
    # success
else:
    # failure
0 голосов
/ 25 марта 2010

Лучше использовать Popen / PIPE для такого рода вещей.

from subprocess import Popen, PIPE

def script(script_text):
     p = Popen(args=script_text,
               shell=True,
               stdout=PIPE,
               stdin=PIPE)

     output, errors = p.communicate()
     return output, errors

script('./manage.py sqlclear my_database_name')  

Я бы не рекомендовал использовать os.system , поскольку он имеет ряд ограничений.

Как Документация Python говорит:

Это реализуется вызов стандартной функции C система (), и имеет тот же ограничения. Изменения в sys.stdin, и т. д. не отражены в среда выполненной команды.

0 голосов
/ 25 марта 2010

Я бы порекомендовал subprocess.Popen() для общего случая. Это более гибкий, чем os.system().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...