Je préfère ceci en disant que c'est un devoir. Je ne veux pas que le code soit écrit pour moi, juste pour être dirigé dans la bonne direction.
Nous sommes en mesure de travailler sur un projet de notre choix, donc je travaille sur un programme pour être un mini portfolio de tout ce que j'ai écrit jusqu'à présent. Je vais donc créer un programme que l'utilisateur entrera le nom d'un programme (choisi dans une liste donnée) puis exécutera le programme choisi dans le Shell existant.
Cependant, je ne trouve pas vraiment d'informations sur la façon de faire appel à des programmes externes. Est-ce que quelqu'un peut-il me montrer la bonne direction? J'ai envisagé de mettre tout le code dans un long programme avec un tas de boucles if pour exécuter le bon code, mais j'aimerais en faire un BIT plus compliqué que cela.
Si vous voulez appeler chacun comme un script Python, vous pouvez faire
import subprocess
subprocess.call(["python", "myscript.py"])
subprocess.call(["python", "myscript2.py"])
Mais une meilleure façon est d'appeler des fonctions que vous avez écrites dans d'autres scripts, comme ceci:
import myscript
import myscript2
myscript.function_from_script1()
myscript2.function_from_script2()
Où function_from_script1()
etc sont définis dans les fichiers myscript.py et myscript2.py. Voir cette page sur modules pour plus d'informations.
Consultez la documentation subprocess
.
De plus, si vous devez passer des arguments supplémentaires, procédez comme suit:
import subprocess
subprocess.call(["python", "myscript.py", "arg1", "arg2", "argN"])
Si vous souhaitez charger un fichier externe Python et l'exécuter à l'intérieur de l'interpréteur actuel sans avoir à gérer les modules, vous pouvez utiliser le module standard importlib.util .
Ceci est utile lorsque vous devez expédier des scripts Python à des fins de démonstration, mais que vous ne voulez pas les faire partie d'un (sous-) module - tout en étant en mesure de les exécuter automatiquement, comme lors des tests d'intégration. Voici un exemple:
# A sample Python script
sh$ cat snippet/demo.py
SOME_MODULE_GLOBAL=True
print("Hello, here is the demo snippet!")
# There is no `__init__.py in the _snippet_ directory
sh$ cat snippet/__init__.py
cat: snippet/__init__.py: No such file or directory
Maintenant en utilisant importlib.util
vous pouvez charger demo.py
même s'il ne fait pas partie d'un module:
>>> import importlib.util
# Bypass the standard import machinery to manually load a Python script from
# a filepath
>>> spec = importlib.util.spec_from_file_location('demo','snippet/demo.py')
>>> spec
ModuleSpec(name='demo', loader=<_frozen_importlib_external.SourceFileLoader object at 0x7fa549344eb8>, Origin='snippet/demo.py')
>>> module = importlib.util.module_from_spec(spec)
>>> module
<module 'demo' from 'snippet/demo.py'>
# The next command will run the module:
>>> spec.loader.exec_module(module)
Hello, here is the demo snippet!
# Module variables are accessible just like if it was a
# _normally_ imported module:
>>> module.SOME_MODULE_GLOBAL
True