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