2017-06-22 42 views
0

我玩re模块和我有结果我无法解释的差异。Python代码有不同的结果,当代码放置在脚本

我有一个包含下列文字

的Sybase Adaptive Server Enterprise系统性能报告

服务器版本的输入文件:Adaptive Server Enterprise中/ 15.7.0/EBF 22639 SMP SP52/P/ Sun_svr4/OS 5.10/ase157sp5x /64分之3293位/ FBO /周三5月21日0 2点49分14秒2014
运行日期:2017年3月24日
采样开始时间:2017年3月24日12时16分01秒
取样收于:2017年3月24日12时31分01秒
采样间隔:00:15:00
采样模式:没有安全
计数器最后一次清除:2017年3月21日14点49分21秒
服务器名称:SYB01

我有,我想开始与线下的Python代码“运行日期:”(后来我想提取的行块,但让我们按部就班)

import re 
filename = 'D:/sp_sysmon/sp_sysmon_SYB01_170324_121544.txt' 
file_r = open(filename,'r') 
file_content = file_r.read() 
print (file_content) 

pattern_date = re.compile(r"Run Date:", re.MULTILINE) 
bingo = pattern_date.search(file_content) 
bingo.group() 

如果我执行此代码直接在Python控制台我有以下

C:\Users\simon>python 
Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 11:57:41) [MSC >v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import re 
>>> 
>>> filename = 'D:/sp_sysmon/sp_sysmon_SYB01_170324_121544.txt' 
>>> 
>>> file_r = open(filename,'r') 
>>> file_content = file_r.read() 
>>> print (file_content) 
     Sybase Adaptive Server Enterprise System Performance Report 


Server Version:  Adaptive Server Enterprise/15.7.0/EBF 22639 SMP SP52 /P/ 
         Sun_svr4/OS 5.10/ase157sp5x/3293/64-bit/FBO/Wed May 21 0 
         2:49:14 2014 
Run Date:    Mar 24, 2017 
Sampling Started at: Mar 24, 2017 12:16:01 
Sampling Ended at:  Mar 24, 2017 12:31:01 
Sample Interval:  00:15:00 
Sample Mode:   No Clear 
Counters Last Cleared: Mar 21, 2017 14:49:21 
Server Name:   SYB01 

>>> 
>>> pattern_date = re.compile(r"Run Date:", re.MULTILINE) 
>>> bingo = pattern_date.search(file_content) 
>>> bingo.group() 
'Run Date:' 
>>> 

这是输出我希望

现在如果复制这个代码在script.py文件并执行它,我有一个不同的结果,其中调用bingo.group()不显示任何

D:\Perso\My_code\python>python script.py 
     Sybase Adaptive Server Enterprise System Performance Report 
Server Version:  Adaptive Server Enterprise/15.7.0/EBF 22639 SMP SP52 /P/ 
         Sun_svr4/OS 5.10/ase157sp5x/3293/64-bit/FBO/Wed May 21 0 
         2:49:14 2014 
Run Date:    Mar 24, 2017 
Sampling Started at: Mar 24, 2017 12:16:01 
Sampling Ended at:  Mar 24, 2017 12:31:01 
Sample Interval:  00:15:00 
Sample Mode:   No Clear 
Counters Last Cleared: Mar 21, 2017 14:49:21 
Server Name:   SYB01 D:\Perso\My_code\python> 

是否有人有这种差异的ID?

+0

这是因为REPL是_interactive_。如果你输入一个表达式,REPL将回显结果。如果您是从然而脚本运行的代码,你必须明确地打印()'bingo.group的'值:'打印(bingo.group())'。 –

+0

Python交互式shell实现REPL,它代表Read,Evaluate和Print Loop。在脚本中,在另一方面,你必须调用'输入()'或'sys.stdin.readline()'读取输入的一行和'打印()'或'sys.stdout.write函数()'写出输出。 – eryksun

回答

0

您需要打印调用的结果。

0

你忘

print(bingo.group()) 
0

在交互式控制台,每个命令后,其结果的repr()为您提供方便。

这个,所以你需要任何你想打印明确print不执行脚本的时候发生。

+0

我现在将搜索规范性参考。 –

+0

奇怪,没有文档。可能被认为是一个微不足道的细节。 –