Domanda

Così ho usato da riga di comando del freno a mano per codificare il mio video raccolta da memorizzare sul mio NAS in modo da poter usare sul mio HTPC. Ero alla ricerca di un modo per l'uscita sia per lo schermo in modo che posso guardarlo di uscita come di codifica, ma anche in un file in modo da poter tornare indietro e guardare a una particolare sessione di encoding.

La mia soluzione per questo è stato quello di utilizzare una finestra PowerShell per eseguire la codifica e output in un file, quindi un'altra finestra di PowerShell per leggere il file di registro e visualizzarlo sullo schermo. Questo funziona, ma voglio migliorarlo, in quanto non è perfetto. Perché lo script file di read legge a intervalli regolari, manca linee. Anche se riduco l'intervallo, ha un effetto sulle prestazioni del sistema, rendendo la codifica eseguire un po 'più lento. C'è un modo per reindirizzare l'output della prima finestra che sia un file e allo schermo?

Il primo script PowerShell (quella che inizia la codifica) chiamato "Convert1.ps1" (eseguito dalla directory di installazione del freno a mano):

net time \\ODIN |find "Current time"
./HandbrakeCLI.exe -i "<input file>" -o "<output file>" <handbrake parameters>

Il secondo script PowerShell per output in un file, chiamato "Start_Convert.ps1":

d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Completed\Movies\9.29.2010.log

Il terzo script PowerShell per leggere da quel file di registro, chiamato "Watch_Output.ps1":

while (1)
{
(Get-Content d:\Conversions\Completed\Movies\9.29.2010.log)[-1]
Start-sleep 5
}

Mi piacerebbe, idealmente, per ottenere tutto questo fino a una finestra di PowerShell l'esecuzione di un singolo script per avviare la codifica, output in un file, e visualizzarlo sullo schermo.

Modifica (Aggiunta Solution): 2 modi diversi per farlo, io vado con questi ultimi in quanto è più semplice.

Way # 1 - Start-Job Con conseguente script per iniziare il mio conversioni:

Start-Job -Name VideoConvert -ScriptBlock { d:\Conversions\Convert.ps1 2>&1 | out-file d:\Conversions\Movies\Movie.log }
Get-FileTail -Wait Encoding Unicode -Path D:\Conversions\Completed\Movies\Movie.log

Way # 2 - Tee-Object Con conseguente script per iniziare il mio conversioni:

d:\Conversions\Convert.ps1 2>&1 |Tee-Object -File D:\Conversions\Completed\Movies\Movie.log

Grazie ancora tutti. Questo funziona esattamente come volevo che il lavoro.

È stato utile?

Soluzione

Vorrei usare Tee-Object per questo:

./HandbrakeCLI.exe -i infile -o outfile ... 2>&1 | Tee-Object -File movie.log

Aggiunto nella 2>&1 ad errori di cattura nel registro così come lo schermo.

Altri suggerimenti

Che cosa si vuole veramente fare è quello di afferrare il binario tail.exe dal UnxUtils ed eseguirlo come segue:

tail -f D:\Conversions\Completed\Movies\9.29.1010.log

Purtroppo sarà necessario farlo in pronta (o PowerShell) finestra di un secondo comando, ma sarà " f ollow" quel file e visualizzare le linee dal registro che vengono aggiunti.

Se davvero si vuole tenere in una sola finestra, è necessario PowerShell v2 e si può iniziare la codifica come un posto di lavoro (il suo funzionamento in background) e poi seguire quel comando con una chiamata alla coda per la visualizzazione i risultati:

Start-Job -ScriptBlock { ./HandbrakeCLI.exe -i "in" -o "out" "params" > log.txt }
tail -f log.txt
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top