2014-01-05 11 views
1

Итак, я создаю сайт в Django, и мне нужно использовать API, написанный на Ruby. Я загрузил API и написал рубиновый скрипт. Теперь я работаю над вызовом сценария из Django, используя метод подпроцесса POpen. Вот что я имею в своем представлении Django:Проблемы с использованием подпроцесса

def call(request): 
    context = RequestContext(request) 
    if request.method == 'POST': 
     form = sendCall(request.POST) 
     if form.is_valid(): 
      form.save(commit=True) 
      p=subprocess.Popen("cd verboice-api-ruby/lib;ruby \"verbyTest.rb\"",shell=False, stdout=subprocess.PIPE)        
      output, errors = p.communicate()       
      return mainIndex(request) 
    else: 
     print form.errors 
    else: 
    form = sendCall() 
    return render_to_response('main/call.html', {'form': form}, context) 

Я запускаю сервер и активирую вызов. Сценарий ruby ​​отправит вызов, а затем вернется на главную страницу. Но это дает мне ошибку, когда приходит время вызвать фактический рубиновый скрипт. Это дает мне эту ошибку:

OSError at /main/call/ 
[Errno 2] No such file or directory 
Request Method: POST 
Request URL: http://127.0.0.1:8000/main/call/ 
Django Version: 1.5.4 
Exception Type: OSError 
Exception Value:  
[Errno 2] No such file or directory 
Exception Location: /anaconda/lib/python2.7/subprocess.py in _execute_child, line 1308 
Python Executable: /anaconda/bin/python 
Python Version: 2.7.5 
Python Path:  
['/Users/manavdutta/Downloads/savinglives', 
'/anaconda/lib/python27.zip', 
'/anaconda/lib/python2.7', 
'/anaconda/lib/python2.7/plat-darwin', 
'/anaconda/lib/python2.7/plat-mac', 
'/anaconda/lib/python2.7/plat-mac/lib-scriptpackages', 
'/anaconda/lib/python2.7/lib-tk', 
'/anaconda/lib/python2.7/lib-old', 
'/anaconda/lib/python2.7/lib-dynload', 
'/anaconda/lib/python2.7/site-packages', 
'/anaconda/lib/python2.7/site-packages/PIL', 
'/anaconda/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info'] 
Server time: Sun, 5 Jan 2014 16:46:38 -0600 

Что я должен сделать, чтобы остановить эту ошибку?

ответ

2

Он смотрит на меня, как вы используете Popen неправильно:

p = subprocess.Popen(['ruby', 'verbyTest.rb'], cwd='verboice-api-ruby/lib', shell=False, stdout=subprocess.PIPE) 
Смежные вопросы