修复 Perl 脚本的问题
Fix issue on Perl script
我有一个脚本可以读取日志文件并搜索所有 41 个步骤,如果它显示状态“--BuildSuccessful--”,日志文件将从当前文件夹移动到成功文件夹。它工作但最近,有时它无法正常工作。我不明白发生了什么,日志文件仍在当前文件夹中。请花点时间帮助我改进我的代码。
这里是日志文件模板:
Build Number:: 21.9004.5200.0 BUILT TYPE:: Nightly build
===========================================================
Progress Time Build Step
BuildStarted CosmoRR Tue Apr 11 20:05:38 2017 0
CheckChanges Tue Apr 11 20:05:38 2017 0
PreBuildToolsSLN Tue Apr 11 20:14:07 2017 0
ReportDevEnvErrs Tue Apr 11 20:14:12 2017 0
CheckDevenvErrs Tue Apr 11 20:14:12 2017 0
ReplaceUCBVersionNumber Tue Apr 11 20:14:27 2017 1
BuildVPresent Tue Apr 11 20:14:27 2017 2
BuildFlashAndFlex Tue Apr 11 20:14:35 2017 3
BuildFlexTop Tue Apr 11 20:15:00 2017 4
ObfuscatePHP Tue Apr 11 20:15:07 2017 5
ReplaceSTVersionNumber Tue Apr 11 20:15:11 2017 6
RunGetEnums Tue Apr 11 20:15:11 2017 7
ReplaceClientVersionNum Tue Apr 11 20:15:11 2017 8
BuildAllSLN Tue Apr 11 20:15:11 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
BuildSolution Tue Apr 11 20:35:32 2017 10
ReportDevEnvErrs Tue Apr 11 20:43:20 2017 10
CheckDevenvErrs Tue Apr 11 20:43:20 2017 10
BuildPresenterInstaller Tue Apr 11 20:43:20 2017 11
BuildMsiInstaller Tue Apr 11 20:43:20 2017 11
CheckSignCodeErrors Tue Apr 11 20:43:23 2017 11
BuildAcceleratorInstaller Tue Apr 11 20:43:23 2017 11
BuildMsiInstaller Tue Apr 11 20:43:23 2017 11
CheckSignCodeErrors Tue Apr 11 20:43:24 2017 11
CheckSignCodeErrors Tue Apr 11 20:44:24 2017 11
CheckSignCodeErrors Tue Apr 11 20:44:24 2017 11
GetPhoneInstaller Tue Apr 11 20:44:24 2017 12
GetManhattanClientExo Tue Apr 11 20:44:28 2017 13
GetManhattanClientEndo Tue Apr 11 20:44:29 2017 14
GetManhattanClient Tue Apr 11 20:44:29 2017 15
GetShoreTelPlayer Tue Apr 11 20:44:34 2017 16
GetConnectforMSFT Tue Apr 11 20:44:35 2017 17
GetCCClient Tue Apr 11 20:44:37 2017 18
SpawnLinuxBuild Tue Apr 11 20:44:38 2017 19
BuildSwitches Tue Apr 11 20:44:39 2017 20
BuildFilesys Tue Apr 11 21:07:07 2017 20
ReportDevEnvErrs Tue Apr 11 21:07:13 2017 20
CheckDevenvErrs Tue Apr 11 21:07:13 2017 20
BuildCASTestingTools Tue Apr 11 21:07:17 2017 21
ReportDevEnvErrs Tue Apr 11 21:07:33 2017 21
CheckDevenvErrs Tue Apr 11 21:07:33 2017 21
BuildPHR Tue Apr 11 21:07:33 2017 22
BuildRuby Tue Apr 11 21:07:36 2017 23
BuildRubyDirector2 Tue Apr 11 21:07:52 2017 24
CreateTAPISDK Tue Apr 11 21:13:30 2017 25
SignTDIMedia Tue Apr 11 21:13:31 2017 26
BuildAPPFolder Tue Apr 11 21:13:32 2017 27
BuildRubywin Tue Apr 11 21:13:40 2017 28
BuildRubymingw Tue Apr 11 21:18:06 2017 29
BuildNginx Tue Apr 11 21:22:05 2017 30
BuildNginx Tue Apr 11 21:22:06 2017 31
GetSalesforcePlugin Tue Apr 11 21:22:19 2017 32
RunPrep4Install Tue Apr 11 21:22:23 2017 33
RunPrep4Install_iteration_1 Tue Apr 11 21:27:23 2017 33
RunPrep4Install_iteration_2 Tue Apr 11 21:32:23 2017 33
RunPrep4Install_iteration_3 Tue Apr 11 21:37:23 2017 33
RunPrep4Install_iteration_4 Tue Apr 11 21:42:23 2017 33
RunPrep4Install_iteration_5 Tue Apr 11 21:47:23 2017 33
CheckSignCodeErrors Tue Apr 11 21:47:48 2017 33
Client_3rdParty_DiagMonitoring_Installer Tue Apr 11 21:47:48 2017 34
Build3rdPartyInstaller Tue Apr 11 21:47:48 2017 34
BuildMsiInstaller Tue Apr 11 21:47:48 2017 34
BuildDiagMonitoringInstaller Tue Apr 11 21:47:50 2017 34
BuildMsiInstaller Tue Apr 11 21:47:50 2017 34
BuildDMuiInstaller Tue Apr 11 21:47:51 2017 34
BuildMsiInstaller Tue Apr 11 21:47:51 2017 34
CheckSignCodeErrors Tue Apr 11 21:49:54 2017 34
CheckSignCodeErrors Tue Apr 11 21:49:54 2017 34
BuildRemoteServer Tue Apr 11 21:49:54 2017 35
BuildMsiInstaller Tue Apr 11 21:49:54 2017 35
CheckSignCodeErrors Tue Apr 11 22:01:25 2017 35
BuildRemoteServerDC Tue Apr 11 22:01:25 2017 36
BuildMsiInstaller Tue Apr 11 22:01:25 2017 36
CheckSignCodeErrors Tue Apr 11 22:08:12 2017 36
Server_LinuxDVX_Switch_Platform_DC_Installer Tue Apr 11 22:08:12 2017 37
BuildDataCenterServerInstaller Tue Apr 11 22:08:12 2017 37
BuildMsiInstaller Tue Apr 11 22:08:12 2017 37
BuildLinuxDVSInstaller Tue Apr 11 22:08:14 2017 37
BuildMsiInstaller Tue Apr 11 22:08:14 2017 37
BuildSwitchInstaller Tue Apr 11 22:08:14 2017 37
BuildMsiInstaller Tue Apr 11 22:08:14 2017 37
BuildPlatformInstaller Tue Apr 11 22:13:15 2017 37
BuildMsiInstaller Tue Apr 11 22:13:15 2017 37
BuildServerInstaller Tue Apr 11 22:13:15 2017 37
BuildMsiInstaller Tue Apr 11 22:13:15 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:44 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:46 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:46 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:47 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:47 2017 37
RunpostInstall Tue Apr 11 22:59:47 2017 38
ReportVersions Tue Apr 11 23:00:03 2017 39
BuildAllSims Tue Apr 11 23:00:04 2017 40
ReportSIMDevEnvErrors Tue Apr 11 23:02:41 2017 40
CheckDevenvErrs Tue Apr 11 23:02:41 2017 40
BuildAllSimsVS2010 Tue Apr 11 23:03:44 2017 41
ReportSIMDevEnvErrors Tue Apr 11 23:03:57 2017 41
CheckDevenvErrs Tue Apr 11 23:03:57 2017 41
===========================================================
--BuildSuccessful--
Successful Tue Apr 11 23:05:55 2017 41
还有我的脚本:
opendir DIR1, "C:\BuildStatus\Current\" or die "cannot open dir $dir: $!";
my @files= grep ! /^\.+$/, readdir DIR1;
foreach my $files (@files)
{
$searchsucs = "--BuildSuccessful--";
$oldLoc2 = "C:\BuildStatus\Current\".$files;
$newLocS2 = "C:\BuildStatus\History\Successful\".$files;
$newLocF2 = "C:\BuildStatus\History\Failed\".$files;
open(E_FILE,"C:\BuildStatus\Current\".$files);
@valf2 = <E_FILE>;
my $newLoc2 = "";
foreach $searchf2 (@valf2)
{
if ($searchf2=~/$searchsucs/)
{ print "matched";
$num1 =$num1 + 1;
}else
{ print "not matched";
$num1 = $num1 + 0;
}
}
close E_FILE;
print "moving build status file......\n";
if($num1 == 1) {
fmove($oldLoc2, $newLocS2) or warn "$file Warning: Not able to move build status files \n ";
system(qq(E:\depot\builds\PassedBuilds.bat));
} else {
fmove($oldLoc2, $newLocF2) or warn "$file Warning: Not able to move build status files \n ";
}
}
closedir DIR1;
我看不出是什么导致了您所描述的问题 ("the log file still on folder current"),但我当然可以帮助解决您问题的另一部分 ("help me improve my code")。我会这样写代码:
# Lexical variable for directory handle
# Single-quoted string
# Reverse slash direction to improve readability
opendir my $dir_h, 'C:/BuildStatus/Current/'
or die "cannot open dir $dir: $!";
my @files = grep ! /^\.+$/, readdir $dir_h;
# This doesn't change. Move it out of the loop.
my $searchsucs = '--BuildSuccessful--';
# Rename $files to $file to improve readability
foreach my $files (@files) {
# Lexical variables (with "my")
# Use variable interpolation instead of string concatenation
# Reverse slash durection for readability
# Don't define variables until you need them
my $oldLoc2 = "C:/BuildStatus/Current/$file";
# Lexical variable for file-handle
# Three args in open() call
# Use $oldLoc2 variable
# Check return value from open()
open(my $fh, '<', $oldLoc2)
or die "Cannot open $file: $!";
# Use a $found variable
my $found;
# Remove unused $newLoc2 variable
# Remove unnecessary @valf2 variable
# Process input file a line at a time (use while, not foreach)
# Use Perl's default variable $_ for clarity
while (<$fh>) {
if (/$searchsucs/) {
print "matched";
$found = 1;
# Skip rest of loop
last;
} else {
# This will be a bit noisy!
print "not matched"
}
}
# Lexical filehandle means no need to explicitly close file
print "moving build status file......\n";
# Simpler logic check
if ($found) {
my $newLocS2 = "C:/BuildStatus/History/Successful/$file";
fmove($oldLoc2, $newLocS2)
or warn "$file Warning: Not able to move build status files \n ";
system(qq(E:\depot\builds\PassedBuilds.bat));
} else {
my $newLocF2 = "C:/BuildStatus/History/Failed/$file";
fmove($oldLoc2, $newLocF2)
or warn "$file Warning: Not able to move build status files \n ";
}
}
这有什么帮助吗?
我有一个脚本可以读取日志文件并搜索所有 41 个步骤,如果它显示状态“--BuildSuccessful--”,日志文件将从当前文件夹移动到成功文件夹。它工作但最近,有时它无法正常工作。我不明白发生了什么,日志文件仍在当前文件夹中。请花点时间帮助我改进我的代码。
这里是日志文件模板:
Build Number:: 21.9004.5200.0 BUILT TYPE:: Nightly build
===========================================================
Progress Time Build Step
BuildStarted CosmoRR Tue Apr 11 20:05:38 2017 0
CheckChanges Tue Apr 11 20:05:38 2017 0
PreBuildToolsSLN Tue Apr 11 20:14:07 2017 0
ReportDevEnvErrs Tue Apr 11 20:14:12 2017 0
CheckDevenvErrs Tue Apr 11 20:14:12 2017 0
ReplaceUCBVersionNumber Tue Apr 11 20:14:27 2017 1
BuildVPresent Tue Apr 11 20:14:27 2017 2
BuildFlashAndFlex Tue Apr 11 20:14:35 2017 3
BuildFlexTop Tue Apr 11 20:15:00 2017 4
ObfuscatePHP Tue Apr 11 20:15:07 2017 5
ReplaceSTVersionNumber Tue Apr 11 20:15:11 2017 6
RunGetEnums Tue Apr 11 20:15:11 2017 7
ReplaceClientVersionNum Tue Apr 11 20:15:11 2017 8
BuildAllSLN Tue Apr 11 20:15:11 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
ReportDevEnvErrs Tue Apr 11 20:35:32 2017 9
CheckDevenvErrs Tue Apr 11 20:35:32 2017 9
BuildSolution Tue Apr 11 20:35:32 2017 10
ReportDevEnvErrs Tue Apr 11 20:43:20 2017 10
CheckDevenvErrs Tue Apr 11 20:43:20 2017 10
BuildPresenterInstaller Tue Apr 11 20:43:20 2017 11
BuildMsiInstaller Tue Apr 11 20:43:20 2017 11
CheckSignCodeErrors Tue Apr 11 20:43:23 2017 11
BuildAcceleratorInstaller Tue Apr 11 20:43:23 2017 11
BuildMsiInstaller Tue Apr 11 20:43:23 2017 11
CheckSignCodeErrors Tue Apr 11 20:43:24 2017 11
CheckSignCodeErrors Tue Apr 11 20:44:24 2017 11
CheckSignCodeErrors Tue Apr 11 20:44:24 2017 11
GetPhoneInstaller Tue Apr 11 20:44:24 2017 12
GetManhattanClientExo Tue Apr 11 20:44:28 2017 13
GetManhattanClientEndo Tue Apr 11 20:44:29 2017 14
GetManhattanClient Tue Apr 11 20:44:29 2017 15
GetShoreTelPlayer Tue Apr 11 20:44:34 2017 16
GetConnectforMSFT Tue Apr 11 20:44:35 2017 17
GetCCClient Tue Apr 11 20:44:37 2017 18
SpawnLinuxBuild Tue Apr 11 20:44:38 2017 19
BuildSwitches Tue Apr 11 20:44:39 2017 20
BuildFilesys Tue Apr 11 21:07:07 2017 20
ReportDevEnvErrs Tue Apr 11 21:07:13 2017 20
CheckDevenvErrs Tue Apr 11 21:07:13 2017 20
BuildCASTestingTools Tue Apr 11 21:07:17 2017 21
ReportDevEnvErrs Tue Apr 11 21:07:33 2017 21
CheckDevenvErrs Tue Apr 11 21:07:33 2017 21
BuildPHR Tue Apr 11 21:07:33 2017 22
BuildRuby Tue Apr 11 21:07:36 2017 23
BuildRubyDirector2 Tue Apr 11 21:07:52 2017 24
CreateTAPISDK Tue Apr 11 21:13:30 2017 25
SignTDIMedia Tue Apr 11 21:13:31 2017 26
BuildAPPFolder Tue Apr 11 21:13:32 2017 27
BuildRubywin Tue Apr 11 21:13:40 2017 28
BuildRubymingw Tue Apr 11 21:18:06 2017 29
BuildNginx Tue Apr 11 21:22:05 2017 30
BuildNginx Tue Apr 11 21:22:06 2017 31
GetSalesforcePlugin Tue Apr 11 21:22:19 2017 32
RunPrep4Install Tue Apr 11 21:22:23 2017 33
RunPrep4Install_iteration_1 Tue Apr 11 21:27:23 2017 33
RunPrep4Install_iteration_2 Tue Apr 11 21:32:23 2017 33
RunPrep4Install_iteration_3 Tue Apr 11 21:37:23 2017 33
RunPrep4Install_iteration_4 Tue Apr 11 21:42:23 2017 33
RunPrep4Install_iteration_5 Tue Apr 11 21:47:23 2017 33
CheckSignCodeErrors Tue Apr 11 21:47:48 2017 33
Client_3rdParty_DiagMonitoring_Installer Tue Apr 11 21:47:48 2017 34
Build3rdPartyInstaller Tue Apr 11 21:47:48 2017 34
BuildMsiInstaller Tue Apr 11 21:47:48 2017 34
BuildDiagMonitoringInstaller Tue Apr 11 21:47:50 2017 34
BuildMsiInstaller Tue Apr 11 21:47:50 2017 34
BuildDMuiInstaller Tue Apr 11 21:47:51 2017 34
BuildMsiInstaller Tue Apr 11 21:47:51 2017 34
CheckSignCodeErrors Tue Apr 11 21:49:54 2017 34
CheckSignCodeErrors Tue Apr 11 21:49:54 2017 34
BuildRemoteServer Tue Apr 11 21:49:54 2017 35
BuildMsiInstaller Tue Apr 11 21:49:54 2017 35
CheckSignCodeErrors Tue Apr 11 22:01:25 2017 35
BuildRemoteServerDC Tue Apr 11 22:01:25 2017 36
BuildMsiInstaller Tue Apr 11 22:01:25 2017 36
CheckSignCodeErrors Tue Apr 11 22:08:12 2017 36
Server_LinuxDVX_Switch_Platform_DC_Installer Tue Apr 11 22:08:12 2017 37
BuildDataCenterServerInstaller Tue Apr 11 22:08:12 2017 37
BuildMsiInstaller Tue Apr 11 22:08:12 2017 37
BuildLinuxDVSInstaller Tue Apr 11 22:08:14 2017 37
BuildMsiInstaller Tue Apr 11 22:08:14 2017 37
BuildSwitchInstaller Tue Apr 11 22:08:14 2017 37
BuildMsiInstaller Tue Apr 11 22:08:14 2017 37
BuildPlatformInstaller Tue Apr 11 22:13:15 2017 37
BuildMsiInstaller Tue Apr 11 22:13:15 2017 37
BuildServerInstaller Tue Apr 11 22:13:15 2017 37
BuildMsiInstaller Tue Apr 11 22:13:15 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:44 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:46 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:46 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:47 2017 37
CheckSignCodeErrors Tue Apr 11 22:59:47 2017 37
RunpostInstall Tue Apr 11 22:59:47 2017 38
ReportVersions Tue Apr 11 23:00:03 2017 39
BuildAllSims Tue Apr 11 23:00:04 2017 40
ReportSIMDevEnvErrors Tue Apr 11 23:02:41 2017 40
CheckDevenvErrs Tue Apr 11 23:02:41 2017 40
BuildAllSimsVS2010 Tue Apr 11 23:03:44 2017 41
ReportSIMDevEnvErrors Tue Apr 11 23:03:57 2017 41
CheckDevenvErrs Tue Apr 11 23:03:57 2017 41
===========================================================
--BuildSuccessful--
Successful Tue Apr 11 23:05:55 2017 41
还有我的脚本:
opendir DIR1, "C:\BuildStatus\Current\" or die "cannot open dir $dir: $!";
my @files= grep ! /^\.+$/, readdir DIR1;
foreach my $files (@files)
{
$searchsucs = "--BuildSuccessful--";
$oldLoc2 = "C:\BuildStatus\Current\".$files;
$newLocS2 = "C:\BuildStatus\History\Successful\".$files;
$newLocF2 = "C:\BuildStatus\History\Failed\".$files;
open(E_FILE,"C:\BuildStatus\Current\".$files);
@valf2 = <E_FILE>;
my $newLoc2 = "";
foreach $searchf2 (@valf2)
{
if ($searchf2=~/$searchsucs/)
{ print "matched";
$num1 =$num1 + 1;
}else
{ print "not matched";
$num1 = $num1 + 0;
}
}
close E_FILE;
print "moving build status file......\n";
if($num1 == 1) {
fmove($oldLoc2, $newLocS2) or warn "$file Warning: Not able to move build status files \n ";
system(qq(E:\depot\builds\PassedBuilds.bat));
} else {
fmove($oldLoc2, $newLocF2) or warn "$file Warning: Not able to move build status files \n ";
}
}
closedir DIR1;
我看不出是什么导致了您所描述的问题 ("the log file still on folder current"),但我当然可以帮助解决您问题的另一部分 ("help me improve my code")。我会这样写代码:
# Lexical variable for directory handle
# Single-quoted string
# Reverse slash direction to improve readability
opendir my $dir_h, 'C:/BuildStatus/Current/'
or die "cannot open dir $dir: $!";
my @files = grep ! /^\.+$/, readdir $dir_h;
# This doesn't change. Move it out of the loop.
my $searchsucs = '--BuildSuccessful--';
# Rename $files to $file to improve readability
foreach my $files (@files) {
# Lexical variables (with "my")
# Use variable interpolation instead of string concatenation
# Reverse slash durection for readability
# Don't define variables until you need them
my $oldLoc2 = "C:/BuildStatus/Current/$file";
# Lexical variable for file-handle
# Three args in open() call
# Use $oldLoc2 variable
# Check return value from open()
open(my $fh, '<', $oldLoc2)
or die "Cannot open $file: $!";
# Use a $found variable
my $found;
# Remove unused $newLoc2 variable
# Remove unnecessary @valf2 variable
# Process input file a line at a time (use while, not foreach)
# Use Perl's default variable $_ for clarity
while (<$fh>) {
if (/$searchsucs/) {
print "matched";
$found = 1;
# Skip rest of loop
last;
} else {
# This will be a bit noisy!
print "not matched"
}
}
# Lexical filehandle means no need to explicitly close file
print "moving build status file......\n";
# Simpler logic check
if ($found) {
my $newLocS2 = "C:/BuildStatus/History/Successful/$file";
fmove($oldLoc2, $newLocS2)
or warn "$file Warning: Not able to move build status files \n ";
system(qq(E:\depot\builds\PassedBuilds.bat));
} else {
my $newLocF2 = "C:/BuildStatus/History/Failed/$file";
fmove($oldLoc2, $newLocF2)
or warn "$file Warning: Not able to move build status files \n ";
}
}
这有什么帮助吗?