【问题标题】:How to Execute Linux commands in Django?如何在 Django 中执行 Linux 命令?
【发布时间】:2012-11-09 09:35:21
【问题描述】:

要在 Python 中执行 Linux 命令,我们有很棒的模块:操作系统和子进程。我已经使用 os 和 subprocess 模块在基于控制台的 python 程序中集成了 Linux 命令,但是在 Django 中不会发生同样的事情。以这种观点为例:

def hello(request):
    res = os.system('ls')
    return render_to_response('thanks.html', {'res':res}, context_instance=RequestContext(request))

这个视图返回的唯一值是 0。我也尝试过使用子进程。我得到的输出是0。怎么了?

【问题讨论】:

  • PS 我在模板中正确地将变量 res 称为 {{ rs }}。

标签: django


【解决方案1】:

这不是 Django 问题。这就是os.system 所做的——它给出了系统调用的返回值,在这种情况下0 表示成功执行。

如果你需要获取外部程序的输出,你应该使用subprocess.check_output(仅限2.7)。但是,如果您只对目录列表感兴趣,那么有一个更好的方法可以做到这一点,那就是使用os.listdir

【讨论】:

  • 谢谢! os.listdir 列出了所有目录。但是我想知道如何让 os.system('ls') 列出所有目录。我只是用 ls 来让命令工作。而不是 ls 我想使用: rsync --list-only /home
  • 正如我所说,您应该使用subprocess.check_output 来获取外部调用的输出。 os.system 无法做到这一点。
  • 我将 Django 与 Debian 一起使用,它具有默认的 Python 2.6.6。所以,我不能使用 check_output。有没有其他办法?
  • 在 2.6 中查看this answer 的方法。
【解决方案2】:

0 is this case 是退出状态的返回码,在这种情况下表示“没有任何问题”。

根据os.system doc

在 Unix 上,返回值是以 wait() 指定的格式编码的进程的退出状态。注意POSIX并没有指定C system()函数返回值的含义,所以Python函数的返回值是系统相关的。

在 Windows 上,返回值是系统 shell 在运行命令后返回的值,由 Windows 环境变量 COMSPEC 给出:在 command.com 系统(Windows 95、98 和 ME)上,它始终为 0;在 cmd.exe 系统(Windows NT、2000 和 XP)上,这是命令运行的退出状态;在使用非本地 shell 的系统上,请查阅您的 shell 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2012-10-09
    • 2011-06-11
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多