2013-05-05 4 views
0

J'ai un script suivant en python. pour i dans la plage (10000): imprimer iComment router la sortie du script Python vers un fichier

La partie ci-dessus du code python imprime la valeur de i de 0 à 9999 sur la console.

Maintenant, je voudrais router la sortie du script directement vers un fichier externe.
Sur linux, je peux l'obtenir fait en utilisant la commande suivante

de python_script.py $ python> python_out.txt

Quelle est la commande équivalente sur Windows 7, IDLE Python Shell et sous PyLab?

En outre, imprime Au-dessus de script chiffres de 0 à 9999. Je voudrais prendre un instantané de la sortie, -à-dire que je veux faire passer les 85 premiers enregistrements/numéros à out1.txt OU Je veux passer le les nombres qui sont divisibles par 5 à out2.txt sans changer le script réel.

De me fournir également la documentation Python pour en savoir plus.

+0

ne [Cygwin] (http://www.cygwin.com/) aide? –

+0

que voulez-vous dire par ** sans changer le script réel **? Si vous voulez écrire dans des fichiers différents en fonction de certaines conditions, vous devez modifier le script. –

Répondre

3
file1, file2 = "out1.txt", "out2.txt" 
with open(file1,'w') as f1,open(file2,"w") as f2: 
    for i in range(10000): 
     if i < 85: 
      f1.write("{0}\n".format(i)) # write to out1.txt 
     if i%5==0: 
      f2.write("{0}\n".format(i)) #write to out2.txt 
     print i     #write to stdout or python_out.txt in your case 

et exécuter ce programme:

$python python_script.py > python_out.txt 
+0

Salut Ashwini, je n'aime pas changer le script Python. Le script Python va bien. Votre code python ne fonctionne qu'avec la ligne de commande. Il ne peut pas s'exécuter correctement en appelant directement le script python car il attend deux noms de fichiers en tant qu'args. Ce n'est pas ce à quoi je suis attendu. Plus sur la commande ne fonctionnera pas sur Windowsn – Kumar

+1

@Kranti Ces commandes fonctionnent bien dans Windows, Linux ou Mac, j'ai changé le code que vous pouvez simplement spécifier les noms de fichiers dans le code. Et comment voulez-vous qu'un script se comporte différemment sans changer le script? –

+0

Ashwini, j'ai essayé plusieurs façons d'exécuter la commande mais pas de chance. Je vous ai ajouté sur Facebook. Pouvez-vous venir en ligne et m'aider? – Kumar

1

Il est un peu le code laid, mais vous ne devez changer votre script.

class A: 
    def __init__(self, filename, predicate=(lambda ln, v:True)): 
     self.filename = filename 
     self.lines = 0 
    def write(self, text): 
     if predicate(self.lines, text): 
      with open(self.filename, 'a') as f: 
       f.write(text) 
     self.lines += text.count('\n') 

Utilisation:

import sys 

def predicate(linenumber, text): 
    if text.isdigit(): 
     if int(text) % 5: 
      return False 
    return True 

sys.stdout = A('out1.txt', predicate) 

for i in range(10000): 
    print i 
Questions connexes