使用Python获取Shell输出?

3
我有一个shell脚本,可以获取域名的whois信息,并根据该域名输出takenavailable到shell中。
我想要执行该脚本,并且能够在我的Python脚本中读取这个值。
我一直在使用subprocess.call尝试,但无法弄清如何获取输出结果。
例如:
subprocess.call('myscript www.google.com', shell=True)

将会在shell中输出taken


你使用的是哪个版本的Python?一些答案建议使用subprocess.check_output,这是在2.7中新增的。 - Mark Longair
4个回答

8

subprocess.call() 只返回执行状态码,而不会返回输出内容。如果需要获取输出内容,应该使用 subprocess.check_output()。这两个函数都是对 popen 系列函数的友好封装,你也可以直接使用 popen 函数。

更多详情请参考:http://docs.python.org/library/subprocess.html


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!

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仓库”。


1
尝试使用subprocess.check_output

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接