Usually I can change stdout in Python by changing the value of sys.stdout. However, this only seems to affect print statements. So, is there any way I can suppress the output (to the console), of a program that is run via the os.system() command in Python?
Asked
Active
Viewed 4.3k times
9
Yu Hao
- 115,525
- 42
- 225
- 281
Leif Andersen
- 20,277
- 17
- 65
- 97
4 Answers
26
On a unix system, you can redirect stderr and stdout to /dev/null as part of the command itself.
os.system(cmd + "> /dev/null 2>&1")
ealdent
- 3,537
- 24
- 26
-
This was the answer I was looking for and should've been the accepted answer. – spurra Apr 10 '19 at 18:43
18
You could consider running the program via subprocess.Popen, with subprocess.PIPE communication, and then shove that output where ever you would like, but as is, os.system just runs the command, and nothing else.
from subprocess import Popen, PIPE
p = Popen(['command', 'and', 'args'], stdout=PIPE, stderr=PIPE, stdin=PIPE)
output = p.stdout.read()
p.stdin.write(input)
Much more flexible in my opinion. You might want to look at the full documentation: Python Subprocess module
Blue Peppers
- 3,532
- 2
- 21
- 23
-
Mmm...okay. So than the command is executed on the line P = Popen(...), yes? And it will only show the output when calling p.stdout.read()...yes? Thank you – Leif Andersen Jul 07 '10 at 18:46
-
Okay...the commands did run, but in a separate thread. Is there anyway I can either hault the program while the commands run, or keep it in the same thread? Thank you. – Leif Andersen Jul 07 '10 at 18:54
-
2Simply, use p.wait(). However, apparently this can result in deadlocking when using PIPE stdout if the program generates enough output. See the full documentation at http://docs.python.org/library/subprocess.html#subprocess.Popen.wait . However, I think it should work.. – Blue Peppers Jul 07 '10 at 19:02
-
Hmm...okay, thanks. Also, it appears that using p.communicate() (rather than p.stdout will help clear the pipe. Thanks. – Leif Andersen Jul 07 '10 at 19:16
0
Redirect stderr as well as stdout.
mcandre
- 20,703
- 18
- 81
- 144
-
2That don't do the job quote from http://docs.python.org/library/os.html#process-management os.system(command) Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to sys.stdin, etc. are not reflected in the environment of the executed command. – Xavier Combelle Jul 07 '10 at 18:06
0
If you want to completely eliminate the console that launches with the python program, you can save it with the .pyw extension.
I may be misunderstanding the question, though.
Sean
- 583
- 6
- 18