Como direcionar mensagens de erro (Python) impressas em um console do PowerShell para um arquivo de texto

0

Em primeiro lugar, os erros que estou interessado em redirecionar NÃO são erros do PowerShell, mas aqueles gerados por um script Python que é chamado em meu script do PowerShell. Eu li várias postagens aqui (e em outros sites do StackExchange, no artigo de script do Windows PowerShell e em vários outros locais. Isso me levou a desenvolver o script como está abaixo, mas a saída é um pouco estranha.

$ErrorActionPreference="SilentlyContinue"
Stop-Transcript | out-null
$ErrorActionPreference = "Continue"

$SnapsToTest = Get-ChildItem C:\Snaps\ -Directory
$ErrorFile = "C:\Tools\Scripts\Errors.txt"
$SnapDir = "C:\Logs"
$LogDir = "\var\log\"
$LogFile = "support.log"
$env:PYTHONIOENCODING="UTF-8"

Start-Transcript -path $ErrorFile
Push-Location
Set-Location -Path $SnapDir

$SnapsToTest | ForEach-Object {
        Write-Host $_.Name
        python C:\Tools\Scripts\script1.py $_.Name
        $LogToTest = $_.Name+$LogDir+$LogFile
        python C:\Tools\Scripts\script2.py $LogToTest
    }

Pop-Location
Stop-Transcript

Agora, se eu executar o script usando .\myscript.ps1 > output.text , quase obtenho o que quero depois, mas não completamente.

Acabo com dois arquivos, output.text e errors.txt .

O texto de saída mostra toda a saída gerada pelo script Python. O arquivo de Texto de Erros mostra ALGUMAS da saída gravada na tela, mas não se o script do Python trava um grava seu rastreio de pilha, no entanto, eu vejo isso no terminal, e isso eu não entendo.

Por exemplo, a saída que vejo no arquivo de texto de erro é:

**********************
Windows PowerShell transcript start
Start time: 20160429160228
Username: PC\me
RunAs User: PC\me
Machine: PC(Microsoft Windows NT 10.0.14328.0)
Host Application: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Process ID: 16844
PSVersion: 5.1.14328.1000
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.14328.1000
CLRVersion: 4.0.30319.42000
BuildVersion: 10.0.14328.1000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
SnapDir1
SnapDir2
SnapDir3

No entanto, o que eu vejo no console é:

C:\Tools\Scripts> .\myscript.ps1 | Out-File output.txt
SnapDir1
SnapDir2
Traceback (most recent call last):
  File "C:\Tools\Scripts\script1.py", line 446, in <module>
    main(sys.argv[1])
  File "C:\Tools\Scripts\script1.py", line 436, in main
    dba = DBAnalyser(rootdir)
  File "C:\Tools\Scripts\script1.py", line 54, in __init__
    self.osstatus = self._read_osstatus(osstatus_file)
  File "C:\Tools\Scripts\script1.py", line 170, in _read_osstatus
    ret[hostname]["meminfo"] = { "memtotal": memtotal, "memfree": memfree}
UnboundLocalError: local variable 'memtotal' referenced before assignment
SnapDir3

Não consigo ver como obter o erro acima que vejo no console do PowerShell para mostrar no arquivo Errors.txt

Isso está sendo executado no Windows 10 Pro 64 bits.

    
por Swinster 30.04.2016 / 01:51

0 respostas