A.pyw = originele script wat op de achtergrond draait van Windows-PC's, gestart door een .lnk in startup items (shell:startup)
B.exe = een python script B.py door pyinstaller gemaakt tot windowless one file executable
X.bat = bestand van derde developer die Y.exe (met wisselende locatie door verschillende builds) te openen. Bevat een change dir en een start link (zodat hij de directory van nieuwe builds aan kan passen in die batch)
Y.exe = Programma van derde developer.
>
Een andere dev wil zijn software draaien. A.pyw probeert zijn X.bat te openen welke weer zijn Y.exe opent. En gek genoeg werkt dat niet.
Als ik Y.exe direct open vanuit A.pyw is er niks aan de hand maar via het openen van X.bat start het programma (Y.exe) niet op.
In A.pyw gebruik ik:
Vervolgens kwam er een vraag om Y.exe te controleren (reboot on crash) dus heb ik een watchdog script gemaakt; B.py, en daar B.exe van gemaakt. Bij B.exe hoort een B.ini die de rol van de Batchfile (X.bat) over heeft genomen.
>>
Verschillende methodes als:
Ik denk dat ik iets over het hoofd zie aangaande rechten of IO maar ik kom er zelf niet uit. In de docs en via stackoverflow kom ik ook niet verder. Ik merkte overigens ook verschil tussen het runnen van A.pyw vanuit Idle (start B.exe uberhaupt niet op) en dubbelklikken op A.pyw zelf (start B.exe wel maar geeft geen IO en start Y.exe niet op).
>>>
Gebruikte software:
- Python 3.10
- Windows 10 (build 19044)
B.exe = een python script B.py door pyinstaller gemaakt tot windowless one file executable
X.bat = bestand van derde developer die Y.exe (met wisselende locatie door verschillende builds) te openen. Bevat een change dir en een start link (zodat hij de directory van nieuwe builds aan kan passen in die batch)
Y.exe = Programma van derde developer.
>
Achtergrond van het probleem
De afgelopen 6 jaar ben ik constant aan het ontwikkelen aan een A.pyw dat ik op Windows gebruik om computers te beheren in een specifieke omgeving. Zo start ik programma's vanuit dat script en dat ging altijd probleemloos (via subprocess call, check_output of Popen).Een andere dev wil zijn software draaien. A.pyw probeert zijn X.bat te openen welke weer zijn Y.exe opent. En gek genoeg werkt dat niet.
Als ik Y.exe direct open vanuit A.pyw is er niks aan de hand maar via het openen van X.bat start het programma (Y.exe) niet op.
In A.pyw gebruik ik:
Python:
voor batchfiles en 1
| subprocess.call([rf'{padNaarX+bestandX}']) |
Python:
voor executables.1
| subprocess.Popen({padNaarY+bestandY}, close_fds=True) |
Vervolgens kwam er een vraag om Y.exe te controleren (reboot on crash) dus heb ik een watchdog script gemaakt; B.py, en daar B.exe van gemaakt. Bij B.exe hoort een B.ini die de rol van de Batchfile (X.bat) over heeft genomen.
>>
Huidige probleem
- B.exe checkt in tasklist of het programma (Y.exe) draait en zo niet start het Y.exe op. Hiervoor gebruik ik:
Python:voor batchfiles en1
subprocess.call([rf'{padNaarX+bestandX}'])
Python:voor executables.1
subprocess.Popen({padNaarY+bestandY}, close_fds=True)
Dat werkt prima als ik op B.exe zelf klik. De log wordt geschreven en Y.exe wordt geopend. - Als ik B.exe open vanuit A.pyw dan opent hij de executable wel maar wordt er geen B.log geschreven en voert B.exe ook niet Y.exe uit.
Verschillende methodes als:
Python:
zonder enig succes.1
2
3
| subprocess.call([rf'{padNaarB+bestandB}']) os.startfile(padNaarB+bestandB) os.system(padNaarB+bestandB) |
Ik denk dat ik iets over het hoofd zie aangaande rechten of IO maar ik kom er zelf niet uit. In de docs en via stackoverflow kom ik ook niet verder. Ik merkte overigens ook verschil tussen het runnen van A.pyw vanuit Idle (start B.exe uberhaupt niet op) en dubbelklikken op A.pyw zelf (start B.exe wel maar geeft geen IO en start Y.exe niet op).
>>>
Concrete vraag
Hoe start ik een executable vanuit een draaiend windowless python script zodanig alsof de user zelf de executable heeft gestart; ofwel zonder een subproces van het script te zijn?Gebruikte software:
- Python 3.10
- Windows 10 (build 19044)