[PYTHON] Que faire quand une PermissionError dans tempfile.mkstemp se produit

C'est une chose basique, mais comme ça va un peu, je l'ai enregistré sous forme de mémorandum

Si vous avez besoin d'un fichier temporaire lors de l'écriture d'un test, tempfile Est recommandé.

tempfile.mkstemp () crée un fichier temporaire, mais vous devez supprimer le fichier vous-même. J'ai pensé que je devrais faire ʻos.remove () ʻaprès l'opération de fichier, et à la suite de son écriture et de son exécution, le processus` PermissionError: [WinError 32] ne peut pas accéder au fichier. Un autre processus est en cours d'utilisation. : 'C: \ ... [Chemin du fichier temporaire]' 's'est produit.

Après avoir essayé diverses choses en pensant que la syntaxe with est manquante, il semble que le processus au moment de l'exécution contienne toujours le fichier, il est donc nécessaire de faire ʻos.close () `. fait.

Voici un exemple de test qui a bien fonctionné

class MyFileController():
    def __init__(self, path):
        self.path = path
    
    def output(self, data):
        with open(self.path, "a", newline='', encoding='utf_8_sig', errors='ignore') as f:
            f.write(data)   

class TestMyFileController(unittest.TestCase):
    def test_output(self):
        fd, path  = tempfile.mkstemp()
        mcc = MyFileController(path)
        try:
            mcc.output("test")

            with open(path, encoding='utf_8_sig') as f:
                test_data = f.read()
                self.assertEqual(headers, "test")

        finally:
            os.close(fd)          # <--Ici.
            os.remove(path)

Recommended Posts

Que faire quand une PermissionError dans tempfile.mkstemp se produit
Que faire quand Ubuntu plante
[python] Que faire si vous obtenez une erreur avec send_keys dans le chrome sans tête
Que faire lorsqu'une erreur de suppression se produit lors de la mise à jour de conda
[Beanstalk] Que faire lorsqu'une erreur se produit avec import uuid
Que faire quand UnicodeDecodeError se produit pendant read_csv dans pandas (pd.read_table ())
Que faire lorsque ModuleNotFoundError: Aucun module nommé'XXX 'ne se produit en Python
Que faire si une erreur se produit lors de l'importation de numpy avec VScode
[OSX] [pyenv] Que faire lorsqu'une erreur SSL se produit dans pip
Exemple de ce qu'il faut faire lorsque l'exemple de script ne fonctionne pas (OpenCV-Python)
Que faire si CERTIFICATE_VERIFY_FAILED se produit lorsque nltk.download () est effectué sur macOS pyhon
Que faire lorsqu'une erreur SSL se produit avec pip dans l'environnement Windows10, miniconda, VScode
[Go 1.13] Que faire lorsque la disposition de répertoire inattendue: apparaît
[openpyxl] Que faire lorsque IllegalCharacterError apparaît dans pandas.DataFrame.to_excel
curl: (60) Que faire lorsque le certificat de l'émetteur n'est pas valide.
Que faire lorsque gdal_merge génère un fichier énorme
Que faire si une erreur de décodage Unicode se produit dans pip
Que faire lorsque "impossible d'importer le nom xxx" [Python]
[Python] Erreur de type: l'objet 'WebElement' n'est pas itérable Que faire lorsqu'une erreur se produit
[AWS] Que faire lorsque vous souhaitez piper avec Lambda
Procédures à suivre lorsque le japonais n'est pas affiché dans matplotlib
Que faire lorsque la police PyCharm est étrange ou déformée
Que faire lorsque des séries booléennes non alignables sont fournies comme indexeur
Que faire si une erreur 0xC0000005 se produit dans tf.train.start_queue_runners ()
Que faire si l'installation du package échoue lors du déploiement sur heroku
Que faire si une erreur de communication se produit en raison du proxy lors de l'installation avec la gestion des packages de pip, npm, gem
Que faire lorsque "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" apparaît en Python
OSError: [Errno 40] Que faire lorsque Message trop long apparaît
Que faire lorsque "En-tête HTTP_HOST non valide" apparaît dans Django
ImportError: Pas de module Que faire quand on vous dit
Que faire lorsqu'un artefact manquant se produit dans un fichier jar qui n'est pas défini dans pom.xml
Que faire si ʻObject arrays ne peut pas être chargé quand allow_pickle = False` se produit dans numpy.load ()
Que faire si yum casse
Que faire avec l'installation de Magics
[AWS] Que faire lorsque la commande ping provoque un "délai d'expiration"
Que faire lorsqu'une vidéo ne peut pas être lue par cv2.VideoCapture
Que faire lorsque les paramètres de l'extension jupyterlab ne sont pas reflétés
Que faire si un avertissement de plate-forme non sécurisée apparaît lors de l'exécution de Python
Que faire lorsque vous obtenez "Je ne peux pas voir le site !!!!"
Que faire lorsque le type de valeur est ambigu en Python?
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
Que faire lorsque le résultat téléchargé via scrapy est en anglais
Que faire lorsque pyinstaller: erreur: argument --add-binary: valeur add_data_or_binary invalide: apparaît
[Docker] Que faire en cas d'erreur Impossible de trouver le git binaire apparaît
[Python] Que faire en cas de violation de PEP8 lors du processus d'importation à partir du répertoire ajouté à sys.path
Que faire lorsque "Quelque chose est déjà en cours d'exécution sur le port 8000" s'affiche lorsque la commande de développement de Gatsby est exécutée.
[Python] Que faire lorsqu'une erreur liée à l'authentification SSL est renvoyée
[Django] Que faire lorsqu'une erreur d'intégrité se produit lors de l'enregistrement des données du site de gestion dans la base de données
Que faire lorsque l'avertissement "L'environnement est cohérent ..." apparaît dans l'environnement Anaconda
Remarques sur ce qu'il faut faire lorsque l'effacement des ombres ne fonctionne pas avec scatter () / scatter3d () de matplotlib
Que faire après l'installation de Linux (Ubuntu)
Résumons ce que vous voulez faire.
Que faire si psycopg2 génère une erreur lorsque pipenv se verrouille dans un environnement Pipenv
Que faire lorsqu'un message d'avertissement est affiché dans la liste des pip
Que faire si une erreur se produit lorsque vous chargez un projet Python créé avec de la poésie dans VS Code