By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,659 Members | 1,945 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,659 IT Pros & Developers. It's quick & easy.

Passing data to system command

P: n/a

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
ch******************@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


Jun 18 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
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
ch******************@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


Jun 18 '06 #2

P: n/a
import os, subprocess

xys = [[1,2],[3,4]]
msg = '\n'.join([str(x) + ',' + str(y) for x, y in xys])
os.popen('command', 'w').write(msg)
os.popen2('command')[0].write(msg)

p = subprocess.Popen('command', stdin=subprocess.PIPE)
p.stdin.write(msg)

help(subprocess)
help(os.popen)
help(os.popen3)
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
ch******************@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


Jun 18 '06 #3

P: n/a
In article <ma***************************************@python. org>,
Chris Hieronymus <ch******************@geo.uu.se> wrote:
Jun 18 '06 #4

P: n/a
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
ch******************@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
ch******************@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


Jun 19 '06 #5

P: n/a
In article <ma***************************************@python. org>,
Chris Hieronymus <ch******************@geo.uu.se> wrote:
Jun 20 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.