如何避免使用 sqlplus 的 Python Popen communicate() 函数多次返回相同的 headers

How to avoid Python Popen communicate() function with sqlplus from returning same headers multiple times

正在使用 Python Popen API 通过 sqlplus 连接到 Oracle 数据库。

我的代码:

prodMirrSession = Popen(['sqlplus','-S',prodMirrConnectString], stdin=PIPE,    stdout=PIPE, stderr=PIPE)
prodMirrSession.stdin.write(sqlCommand)
prodQueryResult, prodErrorMsg = prodMirrSession.communicate()

在 prodQueryResult 中,虽然 resultSet 中各行的数据是正确的,但 resultSet header 重复了多次。 例如:

PKD_PKG_DEF_ID||'-'||PKD_NAME||'-'||PKD_JOB_ID||'-'||PKD_OUTPUTDIR||'-'||PKD_FRE
--------------------------------------------------------------------------------
Row 1

Row 2

Row 3

PKD_PKG_DEF_ID||'-'||PKD_NAME||'-'||PKD_JOB_ID||'-'||PKD_OUTPUTDIR||'-'||PKD_FRE
--------------------------------------------------------------------------------

Row 4
......

将 sqlplus 作为独立 bash shell 命令或通过 bash 脚本使用时,情况并非如此。

他们是通过 Popen API 本身来避免它的一种方法。不想在我的 Python 代码中从 Popen.communicate() 迭代整个 stdoutdata 结果集以过滤多次出现的结果集 header.

时产生额外的性能开销

谢谢。

我认为这是页面大小的问题。您可以将页面大小设置为超出行数的某个非常大的数字:

set pagesize 1000000

或者您可以完全关闭 headers(并手动添加或按位置处理):

set pagesize 0

或者你可以使用隐藏功能只打印第一个 header(YMMV,不确定它是否会在未来一直存在):

set pagesize 0 embedded on

此外,由于我注意到您编辑了问题并且我看到了下划线...您也可以将其删除(不是您要求的,但似乎是您可能想要的):

set underline off