所以我试图将命令的输出存储到变量中。我不希望它在运行命令时显示输出。。。
我现在掌握的代码如下。。。
def getoutput(*args):
myargs=args
listargs=[l.split(' ',1) for l in myargs]
import subprocess
output=subprocess.Popen(listargs[0], shell=False ,stdout=subprocess.PIPE)
out, error = output.communicate()
return(out,error)
def main():
a,b=getoutput("httpd -S")
if __name__ == '__main__':
main()
如果我把它放到一个文件中并在命令行上执行它。即使代码中没有print语句,也会得到以下输出。如何在保存输出的同时防止出现这种情况?
#python ./apache.py
httpd: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xx for ServerName
Syntax OK
您正在捕获stdout,但您没有捕获stderr(标准错误),我认为这是消息的来源。
这将把stderr的任何东西放到stdout的同一个位置。
您看到的是标准错误输出,而不是标准输出。Stderr重定向由
stderr
构造函数参数控制。它默认为None
,这意味着没有重定向发生,这就是为什么您看到这个输出。通常保持stderr输出是个好主意,因为它有助于调试,并且不会影响正常的重定向(例如,
|
和>
shell重定向默认不会捕获stderr)。但是,您可以将其重定向到其他位置,方法与执行stdout相同:或者你可以直接放下武器:
相关问题 更多 >
编程相关推荐