web-dev-qa-db-fra.com

Comment exécuter un exécutable externe en utilisant Python?

J'ai un fichier exécutable externe que j'essaie de lancer à partir d'un script Python. L'exécutable CMD s'exécute mais sans générer de sortie. Probablement qu'il se termine avant que la sortie puisse être générée. Toute suggestion sur la façon de retarder la sortie jusqu'à ce que les sorties sont générées? 

import subprocess, sys
from subprocess import Popen, PIPE
exe_str = r"C:/Windows/System32/cmd C:/temp/calc.exe"

parent = subprocess.Popen(exe_str,  stderr=subprocess.PIPE)
12
Ibe

utilisez subprocess.call, plus d'infos ici :

import subprocess
subprocess.call(["C:\\temp\\calc.exe"])

ou 

import os
os.system('"C:/Windows/System32/notepad.exe"')

j'espère que ça t'aide...

10
Aragon

La méthode os.system est dépréciée et ne doit pas être utilisée dans de nouvelles applications. Le module de sous-processus est le moyen Pythonic de faire ce dont vous avez besoin.

Voici un exemple de code que j'ai écrit il y a quelques semaines en utilisant subprocess pour charger des fichiers, la commande à utiliser pour retarder la sortie jusqu'à la réception des données et la fin du programme lancé est wait():

import subprocess

cmd = "c:\\file.exe"
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, creationflags=0x08000000)
process.wait()

creationflags=0x08000000 est un paramètre facultatif qui supprime le lancement d'une fenêtre, ce qui peut être utile si le programme que vous appelez n'a pas besoin d'être vu directement.

6
sgrieve

Option 1:

sous-processus d'importation

subprocess.call ('C:\Windows\System32\calc.exe')

Option 2:

sous-processus.Popen (['C:\Windows\System32\calc.exe'], stdout = sous-processus.PIPE, stderr = sous-processus.PIPE, Shell = True) .communicate ()

option 3:

importer os os.system ('C:\Windows\System32\calc.exe')

0