4

要在 Python 中执行 Linux 命令,我们有很棒的模块:os 和 subprocess。我已经使用 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。怎么了?

4

2 回答 2

4

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

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

于 2012-11-09T09:52:52.087 回答
0

0这种情况是退出状态的返回码,在这种情况下意味着“没有错”。

根据os.system文档

在 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 文档。

于 2012-11-09T09:53:15.070 回答