Reputation: 8596
Im no bash expert so bear with me
I have a python script thats starting other processes, which then emit log messages on stdout.
what bash command would I use to redirect stdout of those child processes back to the stdout of the parent process (the python script thats starting the processes)?
thank you in advance
Upvotes: 1
Views: 647
Reputation: 66033
I'm assuming you're using os.system("command")
to execute your scripts. This method only executes the command and gives you the program's return value and NOT it's stdout. What you need is the subprocess module. For example:
import subprocess
proc = subprocess.Popen(['command', 'option 1', 'option 2'], stdout=subprocess.PIPE)
output = proc.communicate()[0] #for stdout. Use proc.communicate[1] for stderr
On looking at your comment, your solution is simple:
subprocess.Popen('command option 1 option 2', shell=True)
Note: command needs to be passed as a string. A sequence doesn't work.
Upvotes: 1
Reputation: 229854
If you just want to capture the output of the child processes in your python script, the best way to do it would be to use the subprocess
module:
import subprocess
p = subprocess.Popen(['/bin/ls', '-l'], stdout=subprocess.PIPE)
(out, _) = p.communicate()
print "Output:", out
Upvotes: 3