Bonjour,
le script suivant permet de voir la progression d'un script très basique sans identation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env python
#coding=utf-8
import sys
 
class str_stdout:
    def __init__(self):
        self.stdout = sys.stdout
        self.buffer = ''
        sys.stdout = self
    def write(self, str):
        self.buffer += str
    def __str__(self):
        return self.buffer
    def close(self):
        sys.stdout = self.stdout
 
import code
 
text = []
 
console = code.InteractiveConsole()
 
try:
    with open("exemple.py") as f:
        for l in f:
            l = l.rstrip()
            if l:
                tt = str_stdout()
                text.append(">>> " + l)
                console.push(l)
                tt.close()
                tt = str(tt).rstrip() # Pour éviter de récupérer des lignes vides.
                if tt:
                    text.append(tt)
 
except:
    print 'ERROR'
 
text = '\n'.join(text)
 
print text.strip()
Le problème est que pour le script suivant, cela ne fonctionne plus à cause de la boucle :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
#!/usr/bin/env python
#coding=utf-8
for a in range(5):
    print a
 
print '4'
Y aurait-il un moyen relativement simple de contourner ce problème ?

Peut-être suffirait-il de mettre tout le bloc for dans la variable l pour console.push(l) (je n'ai pas Python pour essayer) ?

Une méthode un peu brutale qui me vient à l'esprit serait de créer des fichiers Python intermédiaires qui seraient obtenus avec la ligne No1, puis avec les lignes N°1 et 2, puis ensuite avec les lignes 1 à 3,...etc. On lancerait alors via un processus les fichiers obtenus (du plus petit au plus grand) en récupérant les sorties. Ne serait affiché que ce qui ne produirait pas d'erreur, en prenant soin de ne garder que les nouvelles lignes.

En espérant avoir été clair.

Toute info. est la bienvenue.