Il m'a fallu un peu de temps pour implémenter la solution de Roland en raison de l'ennui de passer du code python sous forme de chaînes, alors j'ai pensé partager un exemple de travail.
Ce script lit un programme externe dans le répertoire de travail et redirige sa sortie standard et son erreur standard vers des fichiers.
from timeit import timeit
reps = 500
stdout = open("add_numbers_outputs.log", 'w')
stderr = open("add_numbers_errors.log", 'w')
external_command = "./add_numbers"
parameter = str(1000000) # one million
call_arguments = """[
'%s',
'%s'], # pass additional parameters by adding elements to this list
stdout=stdout,
stderr=stderr
""" % (external_command, parameter)
print "Timing external command "+external_command+" with parameter "+parameter
time_taken = timeit(stmt = "subprocess.call(%s)" % call_arguments,
setup = """import subprocess;
stdout = open("add_numbers_outputs.log", 'w');
stderr = open("add_numbers_errors.log", 'w')
""",
number = reps)/reps
print "Average time taken for %s repetitions: %f seconds" % (reps, time_taken)
merci! C'est très instructif! :) – Frost
cette réponse semble bien pour chronométrer le code python, mais si nous exécutons un sous-processus, cela peut ne pas être précis, puisque Popen.wait() utilise une boucle occupée. [https://docs.python.org/dev/library/subprocess.html#subprocess.Popen.wait] – ggg
@ggg Vous ne savez pas si c'est vraiment un problème: Popen.wait() doit s'exécuter dans le processus en cours. Par conséquent, l'utilisation des ressources des processus enfants ne doit pas être affectée. – Steohan