Sådan gør du os.execv () i Python i Windows uden at løsne fra konsollen?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger ms Python 2.6 på Windows 7. Jeg har Windows .cmd-fil, der påberåber Python til at køre CherryPy-webserveren (version 3.1.2) .Jeg starter denne .cmd-fil ved at udføre den som et led i en Windows CMD-shell. Når CherryPy bemærker, at en af ​​dens afhængige filer er ændret, genstarter den. Der er et par problemer, der opstår i denne konfiguration på Windows, fordi den påkaldelse, som CherryPy bruger til at genstarte sig selv, er


os.execv(sys.executable, args)


men du kan ikke påberåbe Python eksekverbar på .cmd filen. Jeg har formået at omgå dette problem gennem forskellige Python gymnastik, og nu har jeg fået genstart ved at kalde (i det væsentlige)


os.execv(sys.argv[0], args)


Men genstartet proces løsnes fra tastaturet; det vil fange Ctrl-C, og så spurgte jeg


Terminate batch job (Y/N)?


men typen Y eller N I fanges ikke af den afsluttende .cmd-fil, men af ​​Windows CMD-skalen, og den reagerer


'Y' is not recognized as an internal or external command, operable program or batch file.


Så hvordan sætter jeg op i Windows for at holde den genstarte proces i det, jeg 'kalder' forgrunden 'i Unix?

Bedste reference


Du kan bruge subprocess.call metode som dette eksempel


import subprocess

retcode = subprocess.call(["ls", "-l"])


se dette link for mere information om underprocessklassen:


delproces - Delprocesstyring [6]