如何执行终端命令,然后在Python中反复检查和存储响应?

时间:2014-08-17 00:45:21

标签: python

我有一个要运行一次的终端命令。基本上,当您执行命令时,程序会持续运行,直到另有说明为止。程序运行时,它将继续输出文本字符串到终端。我想以某种方式将这些字符串存储为变量,以便我可以检查它是否包含特定的关键字。 我尝试使用os.system,但是唉,它没有存储程序的响应。 在此先感谢,我很抱歉我的天真

1 个答案:

答案 0 :(得分:3)

要生成运行命令的子进程,请使用subprocess.Popen

proc = subprocess.Popen(['cat', 'myfile'], stdout = subprocess.PIPE)

通过将stdout设置为PIPE,您可以通过您控制的频道输出cat个文字。

Popen返回时,proc.stdout将是file-like对象,您可以read()。为方便起见,它还公开了readline()

readline()返回流的下一行,包括最后一行\n。当它返回''时,没有什么可读的。

line = proc.stdout.readline()

while line != '':
    print line

您还可以创建一个行迭代器来逐行遍历输出。您可以将此迭代器提供给其他函数,然后可以使用子进程的输出而不直接与进程对象交互:

iterator = iter(proc.stdout.readline, '')

# Somewhere else in your program...
for line in iterator:
    print line