sys.stdout.write不会grep

时间:2019-03-11 10:56:03

标签: python grep

我有一个python脚本作为启动脚本写入屏幕。我想监视服务器的进度,因此进入一个循环检查状态。我不想写下屏幕。因此,我正在使用sys.stdout.write。问题是我正在使用的程序(wlst Weblogic)打印所有我不想显示的日志。我通过使用grep和仅打印以空格开头的行来解决此问题。

我有这个功能

def printRoll():
   print ' Is my Print working'
   myTest = ' Hello'
   myTest1 = 'test 123'
   sys.stdout.write("\r %s " % myTest)
   sys.stdout.flush()
   systime.sleep(10)
   sys.stdout.write("\r  %s " % myTest1)
   sys.stdout.flush()
   systime.sleep(10)

我要显示的是:

 Is my Print working
 Hello

然后10秒钟后,您好用

覆盖
 test 123

如果我运行grep命令

python 'printRoll()' | grep '^[[:space:]]\{1\}[A-Za-z0-9]' --line-buffered 

仅打印第一行

Is my Print working

它不会打印任何sys.stdout.write行。我认为这与缓冲有关,但我找不到我的问题的例子。

python脚本可以正常工作,但是它还包含许多其他我不想打印到屏幕上的信息。

任何帮助表示赞赏。

我认为它是Python的旧版本,即2.7

欢呼 詹姆斯

1 个答案:

答案 0 :(得分:1)

问题是,就您SORT BY FIELD(而言,其他行不是新的,因为您没有输出, 'XS', 'S', 'M', 'L')换行符。

grep看到的是–此输出通过grep进行十六进制转储,因此我们可以看到所有字符-以下内容。 \n(在转储的第二行)是换行符。您可以看到之后没有更多的换行符(xxd s),因此0a可以将输入切成行了。

0a