python - os.execl fejlagtigt argument split

Indlæg af Hanne Mølgaard Plasc

Problem



En (lidt brudt) kode for at genstarte et pythonprogram ved hjælp af sin egen tolk, dens argumenter og erstatning af processen er at bruge en af ​​os.exec funktionerne, for eksempel os.execl. [8]


 os.execl(path, arg0, arg1, ...)
 ...



  Disse funktioner alle udfører et nyt program, der erstatter den nuværende proces; de vender ikke tilbage. På Unix, er den nye eksekverbare indlæst i den aktuelle proces, og vil have samme proces id som den, der ringer. Fejl vil blive rapporteret som OSError-undtagelser.



Så jeg har gjort dette:


import os,sys

def restart\_program():
    """Restarts the current program, with file objects and descriptors
       cleanup
    """
    print("restarting")
    python = sys.executable
    os.execl(python, python, *sys.argv)

restart\_program()


Jeg får:


C:Program: can't open file 'FilesPython36python.exe': [Errno 2] No such file or directory


Klart et tilfælde af 'forbandede sti med mellemrum'. Bortset fra at det ikke skulle ske, fordi jeg ikke selv skrev kommandolinjen, men passerede argumenterne rent.


For at få det til at fungere, da arg0 (normalt) ignoreres, gør jeg (for eksempel):


os.execl(python, "python.exe", *sys.argv)


nu kører programmet.


Så fejl eller Windows-version 'feature'?

Bedste reference