Passing data to system command

Chris Hieronymus christoph.hieronymus at geo.uu.se
Mon Jun 19 13:56:20 CEST 2006


Hi,

Holy mackerel, this really works; thanks a lot, guys.  I played  
around a little bit with the
suggestions by faulkner and hdante and pieced together the following  
script.  I like this
very much because I can write a bunch of data to the pipe, rather  
than making one big
string containing perhaps several thousand lines of x-y pairs.  I've  
tested the script for
up to 100,000 data pairs and it works; passing a single string with  
that many lines to
the psxy command generally leads to problems (?), I'm told...

For any other newbie's out there that are trying to use python and  
GMT together:
The script uses GMT's psxy command (with the required arguments),  
generates some
x-y data (just a sine function), and writes each x-y pair as a string  
to the pipe.  This should
work equally for any other GMT-commands.

I'm still trying to work out some of the details myself; I don't  
understand, yet, what exactly
the command "communicate" does; but it seems to be needed.

chris


=================================================================

#! /usr/bin/python

from subprocess import Popen, PIPE
from math import *
from os import system

psfile = 'output1.ps'
cmd = 'psxy -R0/100/0/10 -JX10 -B10/1'


my_output = file(psfile, 'w')
p1 = Popen(cmd,stdin = PIPE,stdout=my_output,shell=True)
for i in range(10000):
   x = float(i)/100.0
   y = 4.*sin(x/10.)+5.0
   msg = str(x)+"  "+str(y)+"\n"
   p1.stdin.write(msg)

p1.communicate()
my_output.close()

cmd = 'gv '+psfile
print cmd
p2 = Popen(cmd,shell=True)
p2.communicate()

=================================================================


On Jun 18, 2006, at 11:27 PM, hdante wrote:

>  Should be like this:
>
>  from subprocess import Popen, PIPE
>
>  my_output = file('output1.ps', 'w')
>  p1 = Popen(["psxy"], stdin = PIPE, stdout=my_output)
>  p1.stdin.write(my_format(array))
>  p1.communicate()
>  my_output.close()
>
>  I've never used that, though, please tell us if it worked.
>
> Chris Hieronymus wrote:
>> Hi,
>>
>> I have a bunch of x-y data contained in an array.  I would like to
>> plot the data using an
>> external program (psxy in GMT).  The plotting program takes x-y
>> couples as standard
>> input.  How do I get the data into the system call?  I used to do
>> things in csh and awk,
>> i.e., something like
>>
>> awk '{<some manipulations here>; print $1, $2}' filename | psxy <some
>> options> >! output.ps
>>
>> The reason I'm trying to use python is because the manipulations are
>> getting too cumbersome
>> in awk.  Now I have all the manipulations done in python, but I'm
>> missing that last step.
>>
>> I've tried various things with os.system, popen, and subprocess, but
>> so far without success.
>> Does anyone know how to do this?
>>
>> chris
>>
>>
>> --------------------------------------------------------------------- 
>> ---
>> -------------------------------------------
>> Christoph
>> Hieronymus
>> christoph.hieronymus at geo.uu.se
>> Associate
>> Professor
>>         phone: (+46) 18-471 2383
>> Uppsala
>> University
>>            fax:       (+46) 18-501   110
>> Dept. of Earth Sciences (Geophysics)
>> Villavägen 16
>> SE-752 36 Uppsala,  Sweden
>
> -- 
> http://mail.python.org/mailman/listinfo/python-list

------------------------------------------------------------------------ 
-------------------------------------------
Christoph  
Hieronymus                                                     
christoph.hieronymus at geo.uu.se
Associate  
Professor                                                                
        phone: (+46) 18-471 2383
Uppsala  
University                                                               
           fax:       (+46) 18-501   110
Dept. of Earth Sciences (Geophysics)
Villavägen 16
SE-752 36 Uppsala,  Sweden







More information about the Python-list mailing list