Python搜索字符串并打印下一个x行数

Python搜索字符串并打印下一个x行数,python,shell,subprocess,Python,Shell,Subprocess,我试图弄清楚如何发送shell命令,在一行中搜索字符串,以及打印x行数。如果我使用open读取文件,但通过shell执行时遇到困难,我就能够完成这项任务。我希望能够发送一个shell命令并使用类似的grep-a命令。有没有类似蟒蛇的方法?下面是我的可测试代码。提前谢谢 我的代码: #!/usr/bin/python3 import subprocess # Works when I use open to read the file: with open("test_file.txt", "

我试图弄清楚如何发送shell命令,在一行中搜索字符串,以及打印x行数。如果我使用open读取文件,但通过shell执行时遇到困难,我就能够完成这项任务。我希望能够发送一个shell命令并使用类似的grep-a命令。有没有类似蟒蛇的方法?下面是我的可测试代码。提前谢谢

我的代码:

#!/usr/bin/python3
import subprocess

# Works when I use open to read the file:

with open("test_file.txt", "r") as myfile:
    for items in myfile:
        if 'Cherry' in items.strip():
            for index in range(5):
               line = next(myfile)
               print (line.strip())

# Fails when I try to send the command through the shell

command = (subprocess.check_output(['cat', 'test_file.txt'], shell=False).decode('utf-8').splitlines())
for items in command:
    if 'Cherry' in items.strip():
        for index in range(5):
            line = next(command)
有错误的输出:

Dragonfruit

--- Fruits ---
Artichoke
Arugula

------------------------------------------------------------------------------------------

Traceback (most recent call last):
  File "/media/next_line.py", line 26, in <module>
    line = next(command)
TypeError: 'list' object is not an iterator

Process finished with exit code 1

自己制作迭代器,而不是让
for
为您完成它。。。(可能有效,也可能无效,我没有对此进行准确测试)


自己制作迭代器,而不是让
for
为您完成它。。。(可能有效,也可能无效,我没有对此进行准确测试)


您已将列表包装到生成器中。删除
子流程周围的无关参数。检查\u输出
行。(这会将
check_output
返回的列表封装在一个生成器中,这…肯定不是你想要的,哈哈。)@PierceDarragh我想它不会。您需要一个生成器表达式来实现这一点。@Pierce Darragh,去掉括号没有帮助。它仍然作为一个具有相同错误的列表进行计算。@PatrickHaugh事实上,无论哪种方式,它都返回相同的结果。这实际上是有意义的,因为没有来触发生成器理解。所以它们只是多余的。你已经在生成器中包装了一个列表。删除
子流程周围的无关参数。检查\u输出
行。(这会将
check_output
返回的列表封装在一个生成器中,这…肯定不是你想要的,哈哈。)@PierceDarragh我想它不会。您需要一个生成器表达式来实现这一点。@Pierce Darragh,去掉括号没有帮助。它仍然作为一个具有相同错误的列表进行计算。@PatrickHaugh事实上,无论哪种方式,它都返回相同的结果。这实际上是有意义的,因为没有来触发生成器理解。所以这些都是多余的。这也没什么用。我得到一个空输出。我错过了打印语句!这很有效。谢谢。@MBasith对不起,我可能会推断你会有一份打印的对账单,然后放进去。。很高兴我能帮上忙这也不太管用。我得到一个空输出。我错过了打印语句!这很有效。谢谢。@MBasith对不起,我可能会推断你会有一份打印的对账单,然后放进去。。很高兴我能帮忙
--- Fruits ---
Apple
Banana
Blueberry
Cherry
Dragonfruit

--- Fruits ---
Artichoke
Arugula
Asparagus
Broccoli
Cabbage
command = (subprocess.check_output(['cat', 'test_file.txt'], shell=False).decode('utf-8').splitlines())
iterator = iter(command)
for items in iterator:
    if 'Cherry' in items.strip():
        for index in range(5):
            line = next(iterator)