0

我想知道如何从 django 视图运行脚本。

它从命令行工作:例如:$ python sync.py但不是通过 django 视图。提前致谢

脚本 1:/home/ubuntu/webapps/sony_mv/sync.py

#!/usr/bin/env python
from subprocess import call
call(["/bin/sh", "/home/ubuntu/webapps/sony_mv/sync.sh"])

脚本 2:/home/ubuntu/webapps/sony_mv/sync.sh

cd /home/ubuntu/webapps/sony_mv
heroku pgbackups:capture -a staging-db --expire
heroku pgbackups:capture -a prod-db --expire
heroku pgbackups:restore DATABASE -a prod-db `heroku pgbackups:url -a staging-d` --confirm prod-db

视图.py

def sync_staging_to_production(request):
    try:
        token = request.GET['token']
    except:
        token = False
    if token == '382749813256-231952135':
        from subprocess import *
        import sys
        p = Popen([sys.executable, '/home/ubuntu/webapps/sony_mv/sync.py'],stdout=PIPE,stderr=STDOUT)
        return render_to_response('hannibal/sync_staging_to_production.html',{'feedback':'Success. Sync in progress.'},context_instance=RequestContext(request))
    else:
        return render_to_response('hannibal/sync_staging_to_production.html',{'feedback':'Authorization required'},context_instance=RequestContext(request))

ls 输出

 $ ls -l sync.*
-rwxrwxr-x 1 root 108 2013-04-09 16:35 sync.py
-rwxrwxr-x 1 root 326 2013-04-09 16:44 sync.sh

whoami 输出

$ python
>>> from subprocess import call
>>> call(["/usr/bin/whoami"])
ubuntu
0
>>> 
4

1 回答 1

0

为 shell 命令的输出添加日志有助于调试。该问题与相应用户的权限和 ssh 密钥有关。添加相应的用户 SSH 密钥解决了该问题。

感谢大家

于 2013-04-11T01:57:31.283 回答