如何用Python获取Shell输出?
我有一个脚本,它可以获取域名的whois信息,然后根据域名的状态输出taken
(已被注册)或available
(可用)到命令行。
我想运行这个脚本,并且能够在我的Python脚本中读取这个输出的值。
我试着使用subprocess.call
这个方法,但不知道怎么才能获取到输出的结果。
比如,
subprocess.call('myscript www.google.com', shell=True)
会在命令行输出taken
。
4 个回答
5
import subprocess as sp
p = sp.Popen(["/usr/bin/svn", "update"], stdin=sp.PIPE, stdout=sp.PIPE, close_fds=True)
(stdout, stdin) = (p.stdout, p.stdin)
data = stdout.readline()
while data:
# Do stuff with data, linewise.
data = stdout.readline()
stdout.close()
stdin.close()
我用的这个说法,显然在这个情况下我是要更新一个svn仓库。
6
手动使用标准输入(stdin)和标准输出(stdout)配合Popen是一个非常常见的做法,因此在subprocess模块中,这个过程被简化成了一个非常实用的方法:communicate
举个例子:
p = subprocess.Popen(['myscript', 'www.google.com'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
(stdoutdata, stderrdata) = p.communicate(input="myinputstring")
# all done!
8
subprocess.call()
这个函数只会给你返回一个结果代码,而不会告诉你具体的输出内容。如果你想要获取输出内容,应该使用 subprocess.check_output()
。这两个函数其实是对一些更底层的功能的简单封装,你也可以直接使用那些底层的功能。
想了解更多细节,可以查看这里: http://docs.python.org/library/subprocess.html