Python系统调用找不到文件,错误在Apache服务器上运行

时间:2013-08-18 19:56:02

标签: android python django linux apache

我正在尝试从我的Python类运行os.system()调用来源我存储在文件中的文件。我从Android应用程序连接到服务器并在Django中运行方法来运行系统调用。服务器正在运行带有mod_wsgi的Apache来部署Django。这是Django方法:

def post_try(request):
    os.chdir("/usr/local/src")
    response = os.system("source sourceme")
    return HttpResponse(response)

就语法而言,代码工作正常,所有必要的导入都已完成,但是我一直得到256错误代码而不是预期的0.我检查Apache日志中的错误,这就是我得到的:< / p>

[Sun Aug 18 19:43:23 2013] [notice] caught SIGTERM, shutting down
[Sun Aug 18 19:43:24 2013] [warn] mod_wsgi: Compiled for Python/2.7.2+.
[Sun Aug 18 19:43:24 2013] [warn] mod_wsgi: Runtime using Python/2.7.3.
[Sun Aug 18 19:43:24 2013] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
[Sun Aug 18 19:46:04 2013] [notice] caught SIGTERM, shutting down
[Sun Aug 18 19:46:05 2013] [warn] mod_wsgi: Compiled for Python/2.7.2+.
[Sun Aug 18 19:46:05 2013] [warn] mod_wsgi: Runtime using Python/2.7.3.
[Sun Aug 18 19:46:05 2013] [notice] Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured -- resuming normal operations
sh: line 0: source: sourceme: file not found

我无法弄清楚发生了什么。我在/usr/locals/src/文件夹中清楚地显示了sourceme文件,我已经使用ls验证了很多次。我不知道发生了什么。我使用os.getcwd()检查目录是否正确更改,但仍无法找到该文件。如果有任何我遗漏的事情,请告诉我,因为我对这个问题感到非常沮丧,我无法意识到。 谢谢

1 个答案:

答案 0 :(得分:1)

您的方法目前没有意义: os.system创建WSGI进程的子进程,而父进程的环境传递给子进程,子进程的环境不与父进程传回/共享。

此外,source不是二进制文件,而是shell本身的内置函数。 如果你想设置环境变量us os.environ,它是变量的字典。

由于您使用的是python,因此使用python程序而不是某些os.system调用会更加明智。也就是说,使用环境变量创建python程序,将其添加到PYTHONPATH并将其导入到django代码中。