【发布时间】:2018-06-26 12:13:54
【问题描述】:
我对 Python 还很陌生,但我需要编写一个 Python 脚本来从命令输出中提取文本块。
让我一步一步解释。
我首先运行一个命令给我这个输出:
B8A64EF4290336BD175189B23B91C5B0574C7FD8A533ADD4C6C17E2C8AB6E7478619483BC9CF177A86B18D902B05DEFD801E309B8825E3DBB82F10AF42FC2C0B0BA9623A41B9981CEE5CDFF6D4E03F90AD32E50711CDF2A9768D70D7B259F001031D1B44C7E25337CD34D5DB0FB8A03F93A9FDA9F180B0180EB0C3E5A2A2D8B4A234A72EE1E709B97645FF18E4997EFD8CA429C02B3937513C390158C5DA7E27318B6AFFC3B52F4FB8879D22CFCEFE08ABA15A6C526DC595F20BE0EAB7B4FACCCFA435214D4B28AC4FCB62D5BFBCD86799E6850138F8289DA9A6F0836CBC6FDEF7F0DE74A4444D5F1A974E19551AC924577970A8E916A64BA62E90EEA2D54EEB P>
接下来,我需要运行另一个命令,它会给出以下输出:
指数: 01 00 01 测试01 创建日期=(00000000) 模数: 发 a4 60 8c a1 d2 6d 8f 4a d0 cc 07 8d 7f 47 43 d0 ac 35 eb b0 08 dd ff 5c f7 39 2d 65 c4 12 3b 0d 96 53 66 99 d1 2d 76 6f b9 23 f7 fb cb ce 22 2e 50 01 cf 32 50 10 5d 0e c1 50 fd 98 01 2d 92 00 3d 96 41 6e 6c 19 0e e2 e0 bc 7e a1 e1 4a 11 dc 39 eb cf 1c 0a ce a9 8e fb ae ea e9 7b f5 c6 41 67 3c a3 75 21 5b 49 d9 05 e5 14 8c f4 94 c8 b3 05 94 a9 da 98 59 64 1a 00 a1 6b 1a 6b 3d c9 84 31 3b 1d d3 46 6c 0b bd 98 8b 76 38 7c b0 f7 d1 f2 7b 22 bf 39 fa dd 1e 95 5c a3 29 f7 e2 58 f5 d2 c8 40 6e c3 8d f3 69 72 f5 f0 fe a9 92 6e d1 c7 54 c4 b3 84 96 dd de 53 37 ec 7e 8d 62 8c 2c 01 7c 0f 30 36 01 46 d9 b2 5f 36 ff 5d 12 分贝 29 ae f1 29 49 28 8b f5 92 8a 6b 27 1b f1 3c 76 0d d9 4a b3 e9 f5 82 89 8d c1 e6 51 7e fc 98 d7 44 cb 6d 7e 7e b2 b5 e1 81 90 f2 24 90 ff 26 a9 指数: 01 00 01 0测试1 创建日期=(00000000) 模数: 94 9f 2c a3 5c 88 2d 6c 6a 79 f5 d5 a1 a0 c0 d5 b2 e0 03 9e 25 fc 7e 5b 67 7a a6 5f 1d b3 29 3d c7 85 b4 20 e8 89 34 03 e1 6a 86 e4 1e ac 2e 19 6d 9b 41 76 b2 52 1b 7d 08 1c ca 51 14 4b 08 63 3e d9 6b af 8d 4f 06 2f 39 c2 69 bc b8 5f fe de 96 27 66 ef 79 67 00 e1 72 ff e4 fd 59 47 9f 7e 05 a4 a6 3d c7 f6 93 28 16 77 2b fa 25 22 81 d5 88 2b 83 e0 7a 86 93 10 0f 4d 26 92 52 a0 d9 e5 指数: 01 00 01 03测试 创建日期=(00000000) 模数: 8e 22 19 02 70 29 34 0d 55 06 88 43 a1 d0 4d 72 f8 9e 65 95 e8 ad ce fe 57 22 ca 74 9e 28 12 66 5d a9 7f 72 c9 e0 5b da b6 c6 dd 29 26 10 9e 07 89 2f 48 60 bd d7 ff 38 75 58 f2 bc f4 ce 9f dd e0 b9 05 1f 42 f3 70 e1 20 f4 57 f0 9c b2 e3 72 b6 e7 9c 9e 85 62 c8 74 43 27 51 da da d2 85 9a 46 bb 35 37 18 93 a1 c7 63 2b 84 f1 58 a9 是 7c c6 51 4d 90 e6 7f 6e 6d 21 65 54 08 3d ce 7c 5b
你看有一个模式。 这是一个块:
指数:01 00 01 Test01 creation_date=(00000000) 模数:fa a4 60 8c a1 d2 6d 8f 4a d0 cc 07 8d 7f 47 43 d0 ac 35 eb b0 08 dd ff 5c f7 39 2d 65 c4 12 3b 0d 9 53 66 99 d1 2d 76 6f b9 23 f7 fb cb ce 22 2e 50 01 cf 32 50 10 5d 0e c1 50 fd 98 01 2d 92 00 3d 96 41 6e 6c 19 0e e2 e0 bc 7e a39 e1 4a 11 dc 1c 0a ce a9 8e fb ae ea e9 7b f5 c6 41 67 3c a3 75 21 5b 49 d9 05 e5 14 8c f4 94 c8 b3 05 94 a9 da 98 59 64 1a 00 a1 6b 1a 6b 3d c9 8d34 31 3b 1 6c 0b bd 98 8b 76 38 7c b0 f7 d1 f2 7b 22 bf 39 fa dd 1e 95 5c a3 29 f7 e2 58 f5 d2 c8 40 6e c3 8d f3 69 72 f5 f0 fe a9 92 6e d1 c7 54 c4 b3 84 96 de 53 37 ec 7e 8d 62 8c 2c 01 7c 0f 30 36 01 46 d9 b2 5f 36 ff 5d 12 db 29 ae f1 29 49 28 8b f5 92 8a 6b 27 1b f1 3c 76 0d d9 4a b3 e9 c f5 88 e6 51 7e fc 98 d7 44 cb 6d 7e 7e b2 b5 e1 81 90 f2 24 90 ff 26 a9
在命令的实际输出中,有 135 个块。
我应该实现的是比较我的第一个命令的输出和我的第二个命令的内容,如果我找到一个完全匹配的,我应该返回出现在 creation_date 之前的名称。 “Test01”、“0Test1”等
我可以通过使用“模数”一词的出现次数(因此是 135 次)创建一个 for 循环来循环第二个输出。
我遇到困难的部分是,在我的 for 循环的每个步骤中,提取下一个“块”,仅提取模数信息,删除空格并进行比较。
我可以通过硬编码一些东西来实现它,但这可能不是每次都有效,所以我更喜欢找到一个干净的解决方案。
对我有什么建议吗?
这是我目前写的代码:
#!/usr/bin/env python
import subprocess
import sys
import os
cmd1= "/opt/myCommand1"
#This returns "Modulus=verylongmodulus
So I extract only the actual modulus, removing "Modulus="
myModulus = (os.popen(cmd1).read())[8:]
cmd2 = "/opt/myCommand2"
myCommand2Output = (os.popen(cmd2).read()
occurrences = lunaCertificates.count('Modulus')
for x in range(0, occurrences):
#Here I need to extract each block and compare it to the output of the first command. if it matches, return the name
谢谢。 史蒂夫
【问题讨论】:
-
你写过代码吗?
-
您是否正在尝试将第二个命令块的输出与其他块的输出进行比较?因为根据您的问题,通过比较第一个输出和第二个输出块可以实现什么?
-
@vanneilsen 我试图在第二个命令的输出中的任何位置找到我的第一个命令的输出。如果我找到它,请在创建日期之前提取名称。
-
@scharette 我添加了到目前为止我写的代码
-
1.通过从“指数:”中拆分第二个 o/p 来创建一个列表。您将在列表中获得 135 个条目。 2.遍历列表,然后您将获得名称和模数信息。 3.在一些变量中存储名称和模块信息。 4. 对 Modulus info 变量应用 replace(" ", "") 进行规范化。 5. 现在您可以将第一个 o/p 与模数信息进行比较,如果匹配,则返回存储在变量中的名称。 6.重复相同的过程直到结束,你会得到想要的结果。 :)
标签: python