in reply to Reading progress of "copy" executed asynchronously
use strict; use warnings; my $cmd = 'copy.exe'; my @args = ('from', 'to', '/z'); open(EXE, '-|', $cmd, @args) || die "$!"; while(<EXE>){ print "read from program output: ".$_."\n"; } print "done.\n"; close(EXE);
(Update1) Alternatively, if in unix/bash, create a script which forks a copy process and a filestat process. When the copy process finishes, the filestat process is killed. You can use the above perl script to run it.
#!/bin/bash FROM=$1 TO=$2 cp "${FROM}" "${TO}" & wPID1=$! echo "$0 : copy-process, pid is $wPID1" (for((;;)); do stat -c '%s' "${TO}"; sleep 1; done) & wPID2=$! echo "$0 : filestat-process, pid is $wPID2" wait ${wPID1} # wait for copy-process to finish echo "$0 : copy-process is finished" kill ${wPID2} echo "$0 : filestat-process killed"
You could also use the same logic of the bash script in Perl.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Reading progress of "copy" executed asynchronously
by neWerminder (Novice) on Aug 09, 2018 at 04:44 UTC | |
by bliako (Abbot) on Aug 09, 2018 at 10:22 UTC | |
by neWerminder (Novice) on Aug 10, 2018 at 08:26 UTC | |
by vr (Curate) on Aug 10, 2018 at 12:48 UTC | |
by bliako (Abbot) on Aug 10, 2018 at 09:52 UTC |