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