i know that in python, os.system(cmd) can be used to execute a script or command, and the return value is 0 if successful, rather than the standard output of the script that it executes.
e.g.
>>> a=os.system("echo hello")
>>> a
0 (rather than "hello")
my question is how to direct the standard output into a variable in my python script.
11 45079
The only way I've been able to get output from os.system is to use ">" in the command to make the subshell write its output to a file. Then all I have to do is read the file. - >>> os.system("echo hello > output.txt")
-
-
>>> reader = open("output.txt")
-
>>> print reader.read()
-
hello
If you want to just append to the file instead of truncating then appending, use ">>" instead of ">".
It would be nice if there was a more direct method, so hopefully someone else knows one. I'd be very interested to know what it is.
It would be nice if there was a more direct method, so hopefully someone else knows one. I'd be very interested to know what it is.
Tere is the commands module.
[code=python]
>>> import commands
>>> print commands.getoutput("echo helllo")
helllo
>>> import commands
>>> print commands.getoutput("echo hello")
hello
>>> txt = commands.getoutput("uname -a")
>>> print txt
Linux Bob 2.6.20-15-server #2 SMP Sun Apr 15 07:41:34 UTC 2007 i686 GNU/Linux
[code]
I also think os.popen works. but i have no experience with that. commands is quick and easy. i think os.popen is more advanced
i know that in python, os.system(cmd) can be used to execute a script or command, and the return value is 0 if successful, rather than the standard output of the script that it executes.
e.g.
>>> a=os.system("echo hello")
>>> a
0 (rather than "hello")
my question is how to direct the standard output into a variable in my python script.
Since you have not stated your OS, our freind Smygis has given a great solution (if you are running under *nix). I'd recommend, however, that you use the newer subprocess module.
6.8 subprocess -- Subprocess management
New in version 2.4.
The subprocess module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several other, older modules and functions, such as:
os.system
os.spawn*
os.popen*
popen2.*
commands.*
Since you have not stated your OS, our freind Smygis has given a great solution (if you are running under *nix). I'd recommend, however, that you use the newer subprocess module.
Try: - import subprocess as sub
-
retcode = sub.call(["ls", "-l"])
And let us know how that works out for you.
Try: - import subprocess as sub
-
retcode = sub.call(["ls", "-l"])
And let us know how that works out for you.
On Windows, this: -
>>> import subprocess as sub
-
>>> sub.call(['dir'], shell=True)
worked in a Python command-line shell, but not in my IDE (Boa Constructor).
Try: - import subprocess as sub
-
retcode = sub.call(["ls", "-l"])
And let us know how that works out for you.
Still, that prints the result. And does not return it.
So no, Ill stick with commands.
Whenever i need something like this. And thats only happend like two times.
Thanks for all of your replies.
"var = commands.getoutput(cmd)" seems to be good. However, it doesn't check if the command has been executed successfully.
What i want is if it's executed successfully, then write the stdout to a variable, otherwise die with an error message..
If i use "if os.system(cmd) != 0:" to check it before running "var=commands.getoutput(cmd)", then the stdout will not only be written to variable var, but also pop on the prompt screen, which is not what I like..
Does anyone have some idea?
Thanks for all of your replies.
"var = commands.getoutput(cmd)" seems to be good. However, it doesn't check if the command has been executed successfully.
What i want is if it's executed successfully, then write the stdout to a variable, otherwise die with an error message..
If i use "if os.system(cmd) != 0:" to check it before running "var=commands.getoutput(cmd)", then the stdout will not only be written to variable var, but also pop on the prompt screen, which is not what I like..
Does anyone have some idea?
commands.getstatusoutput -
>>> fail = commands.getstatusoutput("ps -q")
-
>>> notfail = commands.getstatusoutput("ps -A")
-
>>> fail[0]
-
256
-
>>> len(fail[1]) # the output
-
1517
-
>>> notfail[0]
-
-
>>> len(notfail[1]) # the output
-
3408
-
-
commands.getstatusoutput -
>>> fail = commands.getstatusoutput("ps -q")
-
>>> notfail = commands.getstatusoutput("ps -A")
-
>>> fail[0]
-
256
-
>>> len(fail[1]) # the output
-
1517
-
>>> notfail[0]
-
-
>>> len(notfail[1]) # the output
-
3408
-
-
brilliant!! thanks a lot..
note also that commands modules is Unix specific.( AFAIK , correct me if i am wrong)
i use this sometimes -
import os
-
fin, fout = os.popen4(cmd)
-
print fout.read() #standard out
-
note also that commands modules is Unix specific.( AFAIK , correct me if i am wrong)
i use this sometimes -
import os
-
fin, fout = os.popen4(cmd)
-
print fout.read() #standard out
-
commands is a simple unix specific wrapper for os.popen:
The whole content of commands.py: -
smygis@Bob:~$ cat /usr/lib/python2.5/commands.py
-
"""Execute shell commands via os.popen() and return status, output.
-
-
Interface summary:
-
-
import commands
-
-
outtext = commands.getoutput(cmd)
-
(exitstatus, outtext) = commands.getstatusoutput(cmd)
-
outtext = commands.getstatus(file) # returns output of "ls -ld file"
-
-
A trailing newline is removed from the output string.
-
-
Encapsulates the basic operation:
-
-
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
-
text = pipe.read()
-
sts = pipe.close()
-
-
[Note: it would be nice to add functions to interpret the exit status.]
-
"""
-
-
__all__ = ["getstatusoutput","getoutput","getstatus"]
-
-
# Module 'commands'
-
#
-
# Various tools for executing commands and looking at their output and status.
-
#
-
# NB This only works (and is only relevant) for UNIX.
-
-
-
# Get 'ls -l' status for an object into a string
-
#
-
def getstatus(file):
-
"""Return output of "ls -ld <file>" in a string."""
-
return getoutput('ls -ld' + mkarg(file))
-
-
-
# Get the output from a shell command into a string.
-
# The exit status is ignored; a trailing newline is stripped.
-
# Assume the command will work with '{ ... ; } 2>&1' around it..
-
#
-
def getoutput(cmd):
-
"""Return output (stdout or stderr) of executing cmd in a shell."""
-
return getstatusoutput(cmd)[1]
-
-
-
# Ditto but preserving the exit status.
-
# Returns a pair (sts, output)
-
#
-
def getstatusoutput(cmd):
-
"""Return (status, output) of executing cmd in a shell."""
-
import os
-
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
-
text = pipe.read()
-
sts = pipe.close()
-
if sts is None: sts = 0
-
if text[-1:] == '\n': text = text[:-1]
-
return sts, text
-
-
-
# Make command argument from directory and pathname (prefix space, add quotes).
-
#
-
def mk2arg(head, x):
-
import os
-
return mkarg(os.path.join(head, x))
-
-
-
# Make a shell command argument from a string.
-
# Return a string beginning with a space followed by a shell-quoted
-
# version of the argument.
-
# Two strategies: enclose in single quotes if it contains none;
-
# otherwise, enclose in double quotes and prefix quotable characters
-
# with backslash.
-
#
-
def mkarg(x):
-
if '\'' not in x:
-
return ' \'' + x + '\''
-
s = ' "'
-
for c in x:
-
if c in '\\$"`':
-
s = s + '\\'
-
s = s + c
-
s = s + '"'
-
return s
-
Sign in to post your reply or Sign up for a free account.
Similar topics
by: Sticks |
last post by:
ok... im not quite sure how to describe my problem.
i have a php script that runs through my entire php site and writes the
resulting output to html files. this is necessary as the nature of the...
|
by: Ben Floyd |
last post by:
It goes like this:
Im converting a perl script that executes a command on each result of
a directory listing. In perl, all is well. In Python, using
approximately
the same logic creates a...
|
by: Paul Nilsson |
last post by:
Hi,
Does anyone know how to redirect text output when issuing a system or an
execlp call? I have a GUI that insists on opening up a console whenever I
give a system function call, and I would...
|
by: alexLIGO |
last post by:
Hi,
I am trying to run a python script that executes several other programs
on the bash (under linux) and reads some of the output of those
programs. This works fine for a couple of os.system()...
|
by: Russ |
last post by:
I've been trying to get my head around this for 3 days now and it
seems like everything I try does not work for one reason or another.
I built a test page using the TabStrip and MultiPage controls....
|
by: Elad |
last post by:
Hello All,
I am trying to capture some printf's from a C function called by
python.
<Working under winxp>
I have tried to following:
STDOUT = 1 # stdout fd
(re, we) = os.pipe() #...
|
by: tatamata |
last post by:
Hello.
How can I run some Python script within C# program?
Thanks,
Zlatko
|
by: grikdog |
last post by:
How to I capture stdout output from a system call and pipe it back into my running script?
system "echo foobar";
# how to continue here with "foobar" in stdin ??
...
I can fake it with...
|
by: vivek samantray |
last post by:
i have a script which executes several queries for n number of records.How can is set the time in that to know how much time each query took to run
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 7 Feb 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:30 (7.30PM).
In this month's session, the creator of the excellent VBE...
|
by: DolphinDB |
last post by:
The formulas of 101 quantitative trading alphas used by WorldQuant were presented in the paper 101 Formulaic Alphas. However, some formulas are complex, leading to challenges in calculation.
Take...
|
by: DolphinDB |
last post by:
Tired of spending countless mintues downsampling your data? Look no further!
In this article, you’ll learn how to efficiently downsample 6.48 billion high-frequency records to 61 million...
|
by: Aftab Ahmad |
last post by:
So, I have written a code for a cmd called "Send WhatsApp Message" to open and send WhatsApp messaage. The code is given below.
Dim IE As Object
Set IE =...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: isladogs |
last post by:
The next Access Europe meeting will be on Wednesday 6 Mar 2024 starting at 18:00 UK time (6PM UTC) and finishing at about 19:15 (7.15PM).
In this month's session, we are pleased to welcome back...
|
by: Vimpel783 |
last post by:
Hello!
Guys, I found this code on the Internet, but I need to modify it a little. It works well, the problem is this: Data is sent from only one cell, in this case B5, but it is necessary that data...
|
by: jfyes |
last post by:
As a hardware engineer, after seeing that CEIWEI recently released a new tool for Modbus RTU Over TCP/UDP filtering and monitoring, I actively went to its official website to take a look. It turned...
|
by: PapaRatzi |
last post by:
Hello,
I am teaching myself MS Access forms design and Visual Basic. I've created a table to capture a list of Top 30 singles and forms to capture new entries. The final step is a form (unbound)...
| |