仅在出现错误时创建错误日志文件
Create error-logfile only if there is an error
我有一个简单的 powershell 脚本,我用它来执行 python 脚本。
我为 redirectStandardOutput 和 redirectstandarderror 预定义了路径,因此我可以在之后检查执行情况。
$datestring = (Get-Date).ToString(“s”).Replace(“:”,”-”)
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"
cd "$base_path\...\"
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow
脚本运行良好。
唯一困扰我的是,即使没有错误,它仍然会创建一个空的错误日志文件。
有没有办法告诉 powershell 仅在确实存在错误时才创建错误日志文件?
您应该继续阅读 try/catch/finaly
使用“Try/Catch”指令,因此如果“Try”指令出现错误,脚本将继续使用“Catch”块。
例如:
Try
{
Your script here...
}
Catch
{
If there is an error in the "Try" block, the script goes into "Catch" block.
Create an Error Message / Log file.
}
您还可以添加异常,这样如果出现特定错误,它会进入不同的 catch 块和 returns 不同的代码。
我认为通过使用参数-RedirectStandardError
,总是会创建日志文件,无论是否将错误写入其中。
如何检查错误日志文件是否存在并且之后长度为零。如果是,删除它?
$datestring = (Get-Date).ToString("s").Replace(":","-")
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"
cd "$base_path\...\"
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow
# test if the errorlog exists and if there is nothing in it, delete it
$errorFile = Get-Item -Path $log_path_error -ErrorAction SilentlyContinue
if ($errorFile -and $errorFile.Length -eq 0) { Remove-Item -Path $errorFile -Force }
P.S。我更喜欢使用 Join-Path
cmdlet,而不是连接字符串以形成路径。
我有一个简单的 powershell 脚本,我用它来执行 python 脚本。 我为 redirectStandardOutput 和 redirectstandarderror 预定义了路径,因此我可以在之后检查执行情况。
$datestring = (Get-Date).ToString(“s”).Replace(“:”,”-”)
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"
cd "$base_path\...\"
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow
脚本运行良好。 唯一困扰我的是,即使没有错误,它仍然会创建一个空的错误日志文件。 有没有办法告诉 powershell 仅在确实存在错误时才创建错误日志文件?
您应该继续阅读 try/catch/finaly
使用“Try/Catch”指令,因此如果“Try”指令出现错误,脚本将继续使用“Catch”块。
例如:
Try
{
Your script here...
}
Catch
{
If there is an error in the "Try" block, the script goes into "Catch" block.
Create an Error Message / Log file.
}
您还可以添加异常,这样如果出现特定错误,它会进入不同的 catch 块和 returns 不同的代码。
我认为通过使用参数-RedirectStandardError
,总是会创建日志文件,无论是否将错误写入其中。
如何检查错误日志文件是否存在并且之后长度为零。如果是,删除它?
$datestring = (Get-Date).ToString("s").Replace(":","-")
$base_path = "C:\mypath"
$python = $base_path + "\...\python.exe"
$py_file = $base_path + "\ScriptsPython\myscript.py"
$log_path = $base_path + "\Logfiles\myscript_$datestring.txt"
$log_path_error = $base_path + "\Logfiles\error_myscript_$datestring.txt"
cd "$base_path\...\"
start-process -FilePath $python """$py_file""" -redirectStandardOutput $log_path -RedirectStandardError $log_path_error -NoNewWindow
# test if the errorlog exists and if there is nothing in it, delete it
$errorFile = Get-Item -Path $log_path_error -ErrorAction SilentlyContinue
if ($errorFile -and $errorFile.Length -eq 0) { Remove-Item -Path $errorFile -Force }
P.S。我更喜欢使用 Join-Path
cmdlet,而不是连接字符串以形成路径。