If I understand you correctly, you want to pipe the value of 
request.POST['post'] to the program run_pipeline.sh and store the output in 
a field of your instance.


You are calling subprocess.Popen incorrectly. It should be:

p = subprocess.Popen(['/path/to/run_pipeline.sh'], stdin=subprocess.PIPE, 
stdout=subprocess.PIPE)


Then pass in the input and read the output

(stdoutdata, stderrdata) = p.communicate()


Then save the data, e.g. in a field of your instance

instance.processed_data = stdoutdata

I suggest you first make sure to get the call to the subprocess working in 
a Python shell and then integrate it in your Django app.
Please note that creating a (potentially long-running) subprocess in a 
request is really bad practice and can lead to a lot of problems. The best 
practice is to delegate long-running tasks to a job queue. For Django, 
Celery <http://www.celeryproject.org/> is probably most commonly used. 
There is a bit of setup involved, though.


Cheers,
Daniel

P.S.: I just answered this question on StackOverflow. I'm reposting my 
answer here hoping that it might help anyone else.

On Friday, March 25, 2016 at 7:03:10 PM UTC+1, Joshua Valdez wrote:
>
> Okay, so I have figured out that the subprocess is the module that I want 
> to use in this context and I have tried implementing some simple code based 
> on the documentation but I am getting an
>
> Exception Type: OSErrorException Value: [Errno 2] No such file or 
> directoryException Location: 
> /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py
>  in _execute_child, line 1335.  
>
> A brief overview of what I'm trying to do:
>
> This is the code I have in views. Its intent is to take text input from 
> the model form, POST that to the DB and then pass that input into my script 
> which produces an XML file which is stored in another column in the DB. I'm 
> very new to django so I'm sorry if this is an simple fix, but I couldn't 
> find any documentation relating django to subprocess that was helpful.
>
> def queries_create(request):
>     if not request.user.is_authenticated():
>        return render(request, 'login_error.html')
>
>
>     form = QueryForm(request.POST or None)
>     if form.is_valid():
>       instance = form.save(commit=False)
>       instance.save()
>       p=subprocess.Popen([request.POST['post'], './path/to/run_pipeline.sh'])
>       p.save()
>
>     context = {
>
>       "title":"Create",
>       "form": form,
>
>     }
>     return render(request, "query_form.html", context) 
>
> Model code snippet:
>
> class Query(models.Model):
>   problem/intervention = models.TextField()
>
>   updated = models.DateTimeField(auto_now=True, auto_now_add=False)
>   timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/c4f0fda6-beb5-41b6-8513-dd515677f0fa%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to