52 votes

Exécutez le processus et n'attendez pas

J'aimerais exécuter un processus et ne pas attendre qu'il revienne. J'ai essayé de spawn avec P_NOWAIT et un sous-processus comme celui-ci :

 app = "C:\Windows\Notepad.exe"
file = "C:\Path\To\File.txt"

pid = subprocess.Popen(
    [app, file], 
    shell=True, 
    stdin=subprocess.PIPE, 
    stdout=subprocess.PIPE,
).pid

Cependant, la fenêtre de la console reste jusqu'à ce que je ferme le Bloc-notes. Est-il possible de lancer le processus et de ne pas attendre qu'il se termine ?

4voto

Bruno Oliveira Points 1130

Je pense que le moyen le plus simple d'implémenter cela consiste à utiliser la famille de fonctions os.spawn* en passant l'indicateur P_NOWAIT

Cela, par exemple, engendrera un cp pour copier un fichier volumineux dans un nouveau répertoire et ne pas prendre la peine de l'attendre.

 import os
os.spawnlp(os.P_NOWAIT, 'cp', 'cp', '/path/large-file.db', '/path/dest')

1voto

idbrise Points 4551

Vous capturez les entrées et les sorties du programme afin que votre programme ne se termine pas tant qu'il garde ces descripteurs de fichiers ouverts. Si vous souhaitez capturer, vous devez fermer les descripteurs de fichiers. Si vous ne souhaitez pas capturer :

 app = "C:\Windows\Notepad.exe"
file = "C:\Path\To\File.txt"

pid = subprocess.Popen([app, file]).pid

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X