Django:用Django运行Unix命令?

时间:2010-03-24 23:30:24

标签: django

很抱歉,如果这是重复的 - 无法通过搜索找到答案。

如何在Django视图文件中运行Unix命令?我想运行'cp'命令来复制刚刚上传的文件。

提前致谢。

6 个答案:

答案 0 :(得分:10)

为什么命令行cp

请改用Python's builtin copyfile()。便携式,更不容易出错。

import shutil
shutil.copyfile(src, dest)

答案 1 :(得分:3)

实际上,运行系统程序的首选方法是使用子进程模块,如:

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

子进程模块是os.system和其他旧模块和函数的替代品,请参阅 http://docs.python.org/library/subprocess.html

当然,如果您只是需要复制文件,可以使用shutil模块中更方便的函数copyfile

答案 2 :(得分:1)

在Python中:

import os
if os.system("cp file1 file2") == 0:
    # success
else:
    # failure

答案 3 :(得分:1)

我会使用iterpipes,这会减少'By Hemidall的胡须,什么是粗俗的语法!'一个人在使用子流程时会倾向于思考。

答案 4 :(得分:0)

对于一般情况,我建议subprocess.Popen()。它比os.system()更灵活。

答案 5 :(得分:0)

最好将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 documentation所说:

  

这是通过实现的   调用标准C函数   system(),并且具有相同的功能   限制。对sys.stdin的更改,   等不反映在   已执行命令的环境。