
On Thu, Jul 14, 2016 at 03:07:29PM +0300, Nir Soffer wrote:
This should work with execCmd, since the special subprocess.STDOUT parameter is handled in subprocess.Popen, and cpopen.CPopen inherit this code. However this is not tested with cpopen, so it may be broken.
But merging stdout and stderr is likely to break v2v output parser, and vdsm log is not the place for virt-v2v debug logs.
I understand that the issue is keeping virt-v2v debug logs (using --verbose?), and the logs are spread in stdout and stderr. Did you discuss this issue with Richard?
FWIW we just faced this same issue with virt-p2v (which runs virt-v2v as a remote subprocess). The resolution was to write a wrapper script that separates out the stdout & stderr. Stdout is displayed to the user. At the same time, stdout + stderr contains all the debugging information and that is sent to a log file. You can find the code here: https://github.com/libguestfs/libguestfs/blob/master/p2v/conversion.c#L959 There were also some corresponding changes to virt-v2v itself to more sensibly apportion the output between stdout & stderr, but those are all included in RHEL 7.3 (not 7.2). The only problem was that if virt-v2v fails, the final error gets sent to stderr (hence to the debugging log file) and not displayed to the user, so on error the wrapper script has to dump out the last 50 lines of the log file. We also wrote a simple ANSI colour parser so that the full colourized output of 'virt-v2v --colours' shows up in virt-p2v (ie. what comes via stdout and is displayed to the user). The code is: https://github.com/libguestfs/libguestfs/blob/master/p2v/gui.c#L1782
I would use tee to write stdout and stderr to an import log file, without changing the code checking import progress.
Maybe virt-v2v can add a --logfile option appending to given log file?
Tricky to implement. In any case, starting with RHEL 7.3, you can achieve the same thing using the ' >> log | tee -a log ' technique used by the wrapper script, see link above. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-p2v converts physical machines to virtual machines. Boot with a live CD or over the network (PXE) and turn machines into KVM guests. http://libguestfs.org/virt-v2v