Bonjour,
J'ai besoin de démarrer un fichier ou un dossier dans l'application associée par défaut sur l'ordinateur (*.txt -> notepad, µ.pdf -> Adobe Acrobat Reader, etc...) en python . Seulement, je souhaite que l'action soit bloquante (ou le devienne, via des opérations).
Le programme continuera son exécution après la fermeture de l'application ouverte (dans cet exemple os.start_file(), mais cela changera surement)
Autrement dit dans ce code:
Après de nombreuses recherches, et d'essai avec des commandes windows, en utilisant subprocess, psutils, etc... aucune méthode n'est bloquante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 def start_file(path): os.startfile(path) # action bloquante start_file("C:\...\file_or_directory") # code à exécuter après la fermeture de l'application démarré par start_file()
il y a la solution de vérifier si le fichier est accessible en écriture (mais cela ne fonctionne que pour les fichiers):
Merci d'avance,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 def is_file_conflict(filepath: str) -> bool: """ Vérifie si un fichier est accessible en écriture :param filepath: chemin d'acces :return: boolean du resultat (True: conflit, False: Libre) """ try: with open(filepath, 'rb+'): return False except PermissionError: return True except FileNotFoundError: return False def start_file(filepath) """ Ouvre le fichier spécifié dans l'application par défaut, attend la fermeture du fichier (débloquage en écriture) Attention, cette fonction est bloquante (que pour les fichiers hors blocnote) """ # ouvre le fichier dans l'application associée par défaut sur l'ordinateur os.startfile(filepath) # temporise ouverture fichier (ouvrir fichier prend du temps) time.sleep(5) # vérifie régulièrement si le fichier est ouvert ( = en cours de modification) while is_file_conflict(filepath): time.sleep(1) print(f'file {filepath} closed') return True
Dymon
Partager