Imprimer et pexpect de journalisation

J'ai un peu de code qui utilise pexpect à la commande d'un processus et de certaines impressions dans le code. L'objectif principal (dans cette question), c'est avoir l' pexpect de sortie et d'impressions enregistrées dans certains fichier journal. Le problème que j'ai rencontré est que le pexpect lignes (données envoyées et reçues) est mêlé avec les impressions sans logique apparente. Je m'attendais à ce que l'impression de cordes et de pexpect sorties seront enregistrées dans l'ordre où ils ont été émis.

Exemple de code est le suivant:

#!/usr/bin/env python

import pexpect
import time, sys, os

###############################################################################
# Subclass of file object to avoid recording extensive whitespace characters
class CleanFile(file):
    def write (self, text):
        # Remove the whitespaces
        out_text = ''
        # process the backspace properly
        bline = ''
        for c in text:
            if (ord(c) == 0x8):
                if (len(bline) == 0):
                    # Move the file pointer.
                    file.seek(self, -1, os.SEEK_CUR);
                else:
                    bline = bline[:-1]
            else:
                bline += c

        # remove whitespaces from inside a line
        out_text += ''.join(c for c in bline if (ord(c) >= 32 or ord(c) == 10));

        file.write(self, out_text);

###############################################################################
def main():
    fout = CleanFile ("options.log_file.log", 'w')

    sys.stdout = os.fdopen (sys.stdout.fileno(), 'w', 0)
    os.dup2 (fout.fileno(), sys.stdout.fileno());

    p = pexpect.spawn ('tclsh')
    p.logfile = fout

    print "Got into tclsh."
    p.sendline('ls');
    p.expect (['%',pexpect.EOF])

    p.sendline('info tclversion');
    p.expect (['%',pexpect.EOF])

    print "Got the version\n"

    p.sendline('info commands %');
    p.expect (['%',pexpect.EOF])

    p.sendline('exit');

    print 'Ended session'

###############################################################################
if __name__ == "__main__":
    main()

C'est le fichier journal de sortie contenu:

Got into tclsh.
ls
% lsinfo tclversion

log  options.log_file.log  pexpect_test.py  runtests.py  runtests_steinway.py
% info tclversionGot the version

info commands %

8.4
% info commands %exit
Ended session

Est-il possible de faire la pexpect et de sortie d'impression séquentielle?


Mise à jour: Basé sur le pexpect page de manuel: "s'il vous Plaît noter, cependant, que la mise en mémoire tampon peut influer sur ce comportement, depuis
l'entrée arrive, des morceaux". De sorte qu'il peut potentiellement affecter l'exploitation forestière.

OriginalL'auteur ilya1725 | 2012-11-27