windows - Python TilladelseFor nogle filoperationer

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg oprettede følgende Python 3.5 script:


import sys
from pathlib import Path

def test\_unlink():
    log = Path('log.csv')

    fails = 0
    num\_tries = int(sys.argv[1])
    for i in range(num\_tries):
        try:
            log.write\_text('asdfasdfasdfasdfasdfasdfasdfasdf')

            with log.open('r') as logfile:
                lines = logfile.readlines()
                # Check the second line to account for the log file header
                assert len(lines) == 1

            log.unlink()
            not log.exists()

        except PermissionError:
            sys.stdout.write('! ')
            sys.stdout.flush()
            fails += 1

    assert fails == 0, '{:\%}'.format(fails / num\_tries)


test\_unlink()


og kør det som sådan: python test.py 10000. På Windows 7 Pro 64 med Python 3.5.2 er fejlfrekvensen ikke 0: den er lille, men ikke-nul. Nogle gange er det ikke engang så lille: 5\%! Hvis du udskriver undtagelsen, bliver det sådan:


PermissionError: [WinError 5] Access is denied: 'C:\...\log.csv'


men det vil til tider forekomme på det eksisterende (), andre gange på write\_text (), og jeg ville ikke blive overrasket, hvis det sker ved linket () og åbent () også.


Bemærk at det samme script, samme Python (3.5.2), men på Linux (via http://repl.it/), har ikke dette problem: fejlfrekvens er 0. [5]


Jeg indser, at en mulig løsning kan være:


while True: 
    try: log.unlink()
    except PermissionError: pass
    else: break


men det er kedeligt og fejlagtigt (flere metoder på Path-forekomst ville have brug for dette, nemt at glemme) og bør ikke være nødvendigt, så jeg tror ikke, det er praktisk løsning.


Så har nogen en forklaring på dette og en praktisk løsning, måske et modeflag et sted der kan indstilles, når Python starter?

Bedste reference