我需要在我的脚本中使用os.system()几次,但我不希望shell的错误出现在我的脚本窗口中。有没有办法做到这一点?我猜这有点像无声的命令,完全运行,但不返回任何文本。我不能使用'try',因为它不是Python错误。
答案 0 :(得分:3)
您可以将命令的标准错误重定向到终端。例如:
# without redirect
In [2]: os.system('ls xyz')
ls: cannot access xyz: No such file or directory
Out[2]: 512
# with redirect
In [3]: os.system('ls xyz 2> /dev/null')
Out[3]: 512
P.S。正如@Spencer Rathbun所指出的,subprocess
模块应优先于os.system()
。除此之外,它还可以直接控制子进程的stdout和stderr。
答案 1 :(得分:2)
调用子进程并操纵其标准输出和标准错误的recommended way是使用subprocess模块。以下是如何抑制标准输出和标准输出:
import subprocess
# New process, connected to the Python interpreter through pipes:
prog = subprocess.Popen('ls', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
prog.communicate() # Returns (stdoutdata, stderrdata): stdout and stderr are ignored, here
if prog.returncode:
raise Exception('program returned error code {0}'.format(prog.returncode))
如果您希望子流程打印到标准输出,您只需删除stdout=…
。