python stdout = subprocess.pipe格式正确

时间:2017-01-18 08:57:31

标签: python subprocess

我的代码是

proc=subprocess.Popen(command,stdout=subprocess.PIPE)
print(proc.stdout.readline())

以下面的格式获得结果。

enter image description here

但是我想要计算并获得只有Datatype CLOBBLOB的列名,并将它们存储在变量中以便在进一步的过程中使用。 DatattypeBLOB Clob的数量是动态的。

例如: -

-----------------------------------------------
| COLUMN_NAME          | DATA_TYPE            |
-----------------------------------------------
| C460                 | VARCHAR2             |
| C459                 | CLOB                 |
| C458                 | VARCHAR2             |
| C457                 | VARCHAR2             |
| C456                 | CLOB                 |
| C8                   | BLOB                 |
| C60901               | VARCHAR2             |
-----------------------------------------------

在这种情况下,我应该得到3变量C459,C456,C8

1 个答案:

答案 0 :(得分:1)

在你的情况下,我会去正则表达式

re.findall('(?m)C(\d+)(?=.+[CB]LOB)', proc.stdout.read())

其中

  • (?m)表示多行搜索,
  • C(\ d +) - C字符,后跟数字
  • (?=。+ [CB] LOB) - 非消费的未指定字符序列,后跟BLOB或CLOB

此单行将为您提供您感兴趣的所有列的列表。

修改

这是一个细分 - 我用常量字符串

替换了输出
In [84]: import re

In [85]: COL_RE = re.compile('(?m)(C\d+)(?=.+[CB]LOB)')

In [86]: output = '''-----------------------------------------------
    ...: | COLUMN_NAME          | DATA_TYPE            |
    ...: -----------------------------------------------
    ...: | C460                 | VARCHAR2             |
    ...: | C459                 | CLOB                 |
    ...: | C458                 | VARCHAR2             |
    ...: | C457                 | VARCHAR2             |
    ...: | C456                 | CLOB                 |
    ...: | C8                   | BLOB                 |
    ...: | C60901               | VARCHAR2             |
    ...: -----------------------------------------------'''

In [87]: columns = COL_RE.findall(output)

In [88]: columns
Out[88]: ['C459', 'C456', 'C8']

下次,你应该做好准备