python stdout=正确格式的subprocess.pipe

python stdout=正确格式的subprocess.pipe,python,subprocess,Python,Subprocess,我的代码正在使用 proc=subprocess.Popen(command,stdout=subprocess.PIPE) print(proc.stdout.readline()) 正在以以下格式获取结果 但是我想计算并获取只有DatatypeCLOB和BLOB的列名,并将它们存储在变量中,以便在进一步的过程中使用。 BLOB和Clob的Datattype的数量是动态的 例如:- ----------------------------------------------- | COLU

我的代码正在使用

proc=subprocess.Popen(command,stdout=subprocess.PIPE)
print(proc.stdout.readline())
正在以以下格式获取结果

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

例如:-

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

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

在您的情况下,我将使用正则表达式

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']

下一次,你应该准备得更充分

只给我['459','456']这个结果。从结果中删除C不确定why@IndrajitSwain,如果你把C移到括号里,你也会得到它。请看,我正在获取列名,但我不想打印这些列名。我想存储在变量中。作业在您的情况下有效吗?@IndrajitSwain,显然,您对Python(或该部分的编程)非常陌生。我很惊讶,因为子流程并不完全是新手级别的包。你应该学习编程。。。只需将操作结果分配给一个变量。我肯定是Python新手,但预期的输出应该动态分配给变量。在我的情况下,我不知道这一团或一团会持续多久。如果它是一个变量,我可以继续这样做。如果将多个值赋给单个变量,我的后续代码将无法工作。