J'ai créé un script qui déplace des fichiers d'un dossier à un autre. Mais comme le dossier d'origine est le dossier Téléchargements, j'en ai besoin pour toujours fonctionner en arrière-plan.
J'ai également un fichier batch standard qui ressemble à ceci:
@py C:\\Python\Scripts\moveDLs.py %*
J'utilise Windows 1. J'ai trouvé des informations pour Linux et OS sur la façon d'utiliser Nohup
dans le fichier batch. Existe-t-il une version Windows?
Si vous avez besoin d'exécuter le script à chaque redémarrage ou mise sous tension du PC?
De plus, comment arrêtez-vous le processus lorsque vous parvenez à le rendre permanent?
Merci beaucoup
Sous Windows, vous pouvez utiliser pythonw.exe
pour exécuter un script python en arrière-plan:
Scripts Python (fichiers avec l'extension
.py
) sera exécuté parpython.exe
par défaut. Cet exécutable ouvre un terminal, qui reste ouvert même si le programme utilise une interface graphique. Si vous ne souhaitez pas que cela se produise, utilisez l'extension.pyw
qui provoquera l'exécution du script parpythonw.exe
par défaut (les deux exécutables sont situés au niveau supérieur de votre Python). Cela supprime la fenêtre du terminal au démarrage.
Par exemple,
C:\ThanosDodd\Python3.6\pythonw.exe C:\\Python\Scripts\moveDLs.py
Afin de faire fonctionner votre script en continu, vous pouvez utiliser le module sched
qui aide à la planification des événements:
Le module sched définit une classe qui implémente un planificateur d'événements à usage général
import sched
import time
event_schedule = sched.scheduler(time.time, time.sleep)
def do_something():
print("Hello, World!")
event_schedule.enter(30, 1, do_something, (sc,))
event_schedule.enter(30, 1, do_something, (s,))
event_schedule.run()
Maintenant, pour tuer un processus d'arrière-plan sous Windows, il vous suffit d'exécuter:
taskkill /pid processId /f
Où processId
est l'ID du processus que vous souhaitez tuer.
Une option consiste à modifier votre script afin qu'il soit conçu pour s'exécuter en continu plutôt que de manière répétée. Enveloppez le tout dans une boucle de temps et ajoutez un sommeil.
import time
while True:
your_script_here
time.sleep(300)
Afin de s'assurer que cela démarre avec la machine et de fournir des redémarrages automatiques en cas d'exception, je vous recommande d'en faire un service Windows à l'aide de Non-Sucking Service Manager (www.nssm.cc). Il y a quelques étapes à cela (voir la documentation) mais une fois terminé, votre script sera juste un autre service Windows que vous pouvez démarrer et arrêter à partir de l'utilitaire services.msc standard.
J'ai trouvé une solution qui fonctionne:
import shutil, os, time
while True:
for filename in os.listdir('folderToMoveFrom'):
if filename.endswith((desired file extensions)):
shutil.move( (folderToMoveFrom + filename), folderToMoveTo)
time.sleep(6)
Si vous exécutez le code ci-dessus sans la fonction time.sleep (), le programme se bloque lorsqu'un nouveau fichier entre dans le dossier en raison d'une erreur "fichier non trouvé" imbriqué dans une autre erreur "fichier non trouvé". Je ne sais pas de quoi il s'agit, mais je suis satisfait de ce que j'ai jusqu'à présent. La seule chose que vous devez faire maintenant est d'ajouter le script au Planificateur de tâches pour qu'il s'exécute sous Pythonw afin qu'il fonctionne comme un processus d'arrière-plan. Ou au lieu d'exécuter le script, vous pouvez exécuter un fichier de commandes tant que vous vous souvenez d'ajouter les instructions appropriées pour pythonw. Vous n'avez besoin de démarrer le processus qu'une seule fois bien sûr.