(Context: I’m trying to monitor a long-running process from a Perl CGI script. It backs up an MSSQL database and then 7-zips it. So far, the backup part (using WITH STATS=1) outputs to a file, which I can have the browser look at, refreshing every few seconds, and it works.)
I’m trying to use 7zip’s command-line utility but capture the progress bar to a file. Unfortunately, unlike SQL backups, where every time another percent is done it outputs another line, 7zip rewinds its output before outputting the new progress data, so that it looks nicer if you’re just using it normally on the command-line. The reason this is unfortunate is that normal redirects using >, 1>, and 2> only create a blank file, and no output ever appears in it, except for >, which has no output until the job is done, which isn’t very useful for a progress bar.
How can I capture this kind of output, either by having every change in % somehow be appended to a logfile (so I can use my existing method of logfile monitoring) just using command-line trickery (no Perl), or by using some Perl code to capture it directly after calling system()?
This doesn’t answer how to capture output that gets rewound, but it was a useful way of going about it that I ended up using.
For restores:
7za lto list the files in the zip file and their sizes7za eusingopen my $command-s $filenameand compare to the listingFor backups:
7za a -w.tmpfile in the dir.tmpfile no longer exists, you’re doneFor restores you get enough data to show a percentage done, but for backups you can only show the total file size so far, but you could compare with historical ratios if you’re using similar data to get a guestimate. Still, it’s more feedback than before (none).