我正在尝试从我的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()
检查目录是否正确更改,但仍无法找到该文件。如果有任何我遗漏的事情,请告诉我,因为我对这个问题感到非常沮丧,我无法意识到。
谢谢
答案 0 :(得分:1)
您的方法目前没有意义:
os.system
创建WSGI进程的子进程,而父进程的环境传递给子进程,子进程的环境不与父进程传回/共享。
此外,source
不是二进制文件,而是shell本身的内置函数。
如果你想设置环境变量us os.environ
,它是变量的字典。
由于您使用的是python,因此使用python程序而不是某些os.system
调用会更加明智。也就是说,使用环境变量创建python程序,将其添加到PYTHONPATH
并将其导入到django代码中。