488 votes

Quelle est la meilleure façon d'appeler un script depuis un autre script ?

J'ai un script nommé test1.py qui n'est pas dans un module. Il contient juste du code qui devrait s'exécuter lorsque le script lui-même est exécuté. Il n'y a pas de fonctions, de classes, de méthodes, etc. J'ai un autre script qui fonctionne comme un service. Je veux appeler test1.py à partir du script exécuté comme un service.

Par exemple :

Fichier test1.py :

print "I am a test"
print "see! I do nothing productive."

Fichier service.py :

# Lots of stuff here
test1.py # do whatever is in test1.py

Je connais une méthode qui consiste à ouvrir le fichier, à lire son contenu et, en gros, à l'évaluer. Je suppose qu'il y a une meilleure façon de le faire. Ou du moins je l'espère.

62 votes

La meilleure solution consiste à écrire des méthodes et des classes et à les utiliser

0 votes

Voir cette réponse : stackoverflow.com/a/71967141/1364242

5voto

Ajoutez ceci à votre script python.

import os
os.system("exec /path/to/another/script")

Cela exécute cette commande comme si elle avait été tapée dans le shell.

5voto

Maisum Abbas Points 124

Un exemple pour le faire en utilisant le sous-processus.

from subprocess import run

import sys

run([sys.executable, 'fullpathofyourfile.py'])

4voto

Benyamin Jafari Points 2126

Voici un exemple avec subprocess bibliothèque :

import subprocess

python_version = '3'
path_to_run = './'
py_name = '__main__.py'

# args = [f"python{python_version}", f"{path_to_run}{py_name}"]  # works in python3
args = ["python{}".format(python_version), "{}{}".format(path_to_run, py_name)]

res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, error_ = res.communicate()

if not error_:
    print(output)
else:
    print(error_)

2 votes

L'exécution de Python en tant que sous-processus de Python n'est presque jamais la bonne solution. Si vous optez pour un sous-processus, vous devez éviter d'utiliser Popen à moins que les fonctions de niveau supérieur ne puissent vraiment pas faire ce que vous voulez. Dans ce cas, check_call o run ferait tout ce dont vous avez besoin et plus encore, avec beaucoup moins de plomberie dans votre propre code.

2voto

Ashwin Balani Points 86

Ce processus n'est pas très orthodoxe, mais il fonctionnerait pour toutes les versions de python,

Supposons que vous vouliez exécuter un script nommé 'recommend.py' à l'intérieur d'une condition 'if', alors utilisez,

if condition:
       import recommend

La technique est différente, mais elle fonctionne !

1voto

Faraaz Kurawle Points 55

Selon l'exemple donné, c'est la meilleure solution :

# test1.py

def foo():
    print("hellow")

# test2.py
from test1 import foo # might be different if in different folder.
foo()

Mais d'après le titre, utiliser os.startfile("path") est le meilleur moyen car il est petit et il fonctionne. Ceci exécuterait le fichier spécifié. Ma version de python est 3.x +.

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