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.
In reply to Re: Reading progress of "copy" executed asynchronously
by bliako
in thread Reading progress of "copy" executed asynchronously
by neWerminder
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |