0
votes

Pourquoi écrire un texte sur le fichier ne fonctionne que lorsque l'appel du terminal?

J'ai reçu ce code simple dans Python qui écrit un "ABC" dans un fichier texte d'appels test.txt . Maintenant, sur une framboise exécute ce code avec oisif ou THONNY ne fonctionne pas, le fichier texte reste vide ... mais au lieu de cela, lorsque vous appelez avec le terminal, il écrit le texte dans le fichier. Quelqu'un peut-il aider? XXX


2 commentaires

Si écrit sur une ligne, c'est une erreur de syntaxe de toute façon. Vous terminez probablement le terminal avant de lire le fichier. Cela déclenche le rinçage du tampon de fichier et la fermeture du fichier (qui devrait mieux être effectué explicitement dans le code).


Hé, je viens de modifier le code, bien sûr, il est écrit en 2 lignes


4 Réponses :


1
votes

essayer d'appeler f.close () à la fin de votre code?


0 commentaires

2
votes

La meilleure pratique des fichiers d'écriture utilise avec code>, il fermera et libérera votre fichier automatiquement.

with open("test.txt","w") as f:
    f.write("abc")


0 commentaires

4
votes

Fichier tampon Python écrit par défaut. Cela fait cela à des fins de performance. Chaque fois que Python écrit dans un fichier (ou un flux IO contrôlé par le système d'exploitation, comme STDOUT), il doit mettre en pause l'exécution et le contrôle des mains au système d'exploitation. Si le système d'exploitation est occupé à faire autre chose, ou si le disque où vous souhaitez écrire vos données est occupé à faire autre chose, vous pouvez attendre longtemps pour une réponse. Au lieu d'attendre chaque fois que vous souhaitez écrire quelque chose, Python écrit les données sur une mémoire tampon en mémoire, puis promet de finalement écrire le contenu de la mémoire tampon dans un fichier une fois que le tampon remplit (un processus appelé "rinçage" de la mémoire tampon). Cela permet à l'exécution de votre programme de continuer immédiatement.

Le risque Lorsque vous utilisez des tampons d'écriture, c'est que si votre programme se bloque avant que le tampon ne soit rincé sur le disque, vous perdez ces données. De plus, si un programme écrit sur un tampon et continue d'exécuter de cette manière, il n'est pas garanti qu'un programme en cours d'exécution concurrencera ces données sur le disque jusqu'à ce que le premier programme afflit d'une autre manière. Ce second scénario est ce qui se passe dans votre exemple: Idle exécute un processus Python qui écrit sur un tampon et vous exécutez un deuxième processus simultané pour vérifier sur le fichier pendant que l'inactif est toujours en marche. Parce que le tampon n'a pas été rincé dans Idle, vous ne verrez rien écrit. Cela ne se produit pas lorsque vous exécutez le programme à partir du terminal car le processus de python se termine et l'une des tâches de nettoyage effectuées lorsqu'un processus se termine consiste à rincer tous les tampons d'écriture.

Il y en a beaucoup façons de forcer une tampon rincer. NOREFERRER"> Python Flushes Écrire des tampons automatiquement lorsque les fichiers sont fermés , Pour que vous puissiez essayer: xxx

Le moyen préféré d'ouvrir les fichiers dans Python utilise un avec Déclaration Contexte Manager . Lorsque l'exécution quitte le bloc avec , les variables créées dans l'instruction avec sont racontées de se nettoyer, ce qui dans le cas des fichiers signifie les fermer. Donc, vous pouvez essayer: xxx

si vous souhaitez conserver le fichier ouvert et affleurer manuellement le tampon d'écriture, Python vous donne le flush méthode , afin que vous puissiez également écrire: < Pré> xxx

Enfin, vous pouvez dire à Python d'utiliser un tampon de taille différente que la valeur du système d'exploitation en passant le Bumboring Argument à Ouvrir . Une valeur de 0 indique à Python d'avoir immédiatement rincer chaque écriture sur disque. Donc, vous pouvez le faire: xxx


0 commentaires

0
votes

Lorsque vous ouvrez explicitement le fichier en faisant

with open("test.txt","w") as f:
    f.write("abc")


0 commentaires