如何用Python获取Shell输出?

3 投票
4 回答
6739 浏览
提问于 2025-04-16 09:53

我有一个脚本,它可以获取域名的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

撰写回答