permet de dire que j'ai un dossier contenant les fichiers suivants:
f1.py p>
f2.py p>
f3.py p> blockQuote>
in f1.py j'ai reçu ce code: p>
xxx pré> mais dans f2.py et f3.py j'ai ce code: p> < Pré> xxx pré>
et je veux modifier les chaînes de la fonction "Imprimer" dans F2.PY et F3.py à la chaîne J'ai imprimée dans F1.py et exécutez tous les fichiers de la Dossier après avoir changé les cordes, en utilisant f1.py p> p>
3 Réponses :
Il serait préférable d'avoir plus de contexte pourquoi vous voulez faire cela. p>
Ceci est possible, mais dans 99% des cas, ce n'est pas une idée de Dieu d'écrire du code auto-modifiant, bien qu'il puisse être très amusant. P>
En fait, vous n'écrivez pas vraiment au code de modification automatique, mais plus une pièce de code modifiant d'autres fichiers. Mais cela est également rarement recommandé. P>
De plus d'habitude est que l'on analyse / analyse un script f1.py, extrait les données écrivent certaines données dans un fichier (par exemple un fichier JSON) et f2.py et f3.py lire les données de ce fichier et imprimez ensuite ces données. P>
y a-t-il une raison particulière que vous souhaitez avoir du code, qui modifie d'autres fichiers Python. P>
Si vous voulez vraiment avoir F2.py et F3.py modifié, il y a une autre solution appelée modèle (vous pouvez par exemple utiliser Jinji). Dans ce cas, vous avez deux fichiers de modèle f2.py.template et f3.py.template. P>
Vous écrivez un fichier analysant f1.py, extrayant les données et crée F2.py de F2.PY.Template et les données extraites. (Pareil pour f3.py.template et f3.py) p>
Si vous êtes vraiment sûr à 100%, que vous voulez vraiment ce que vous demandez. P>
Oui, il est possible: p>
Vous écrivez un script, THT s'ouvre et lit F1.py ligne par ligne, recherche la ligne Puis il lit F2.py ligne par ligne et l'écrit à un autre fichier (E.G. NEXT_VERSION_OF_F2.PY). il se lit dans une ligne et l'écrit jusqu'à ce qu'elle rencontre la ligne alors vous fermez "# o =", code> alors mémorise la ligne suivante. P>
#m = "chaîne aléatoire code> dans f2.py Dans ce cas, la ligne sera écrite, l'impression souhaitée sera écrite, le Ligne d'impression à partir de F2.py sera lu et ignorée, puis vous lisez et écrivez toutes les autres lignes. P>
f2.py code> et next_version_of_f2.py code>, renommer f2.py dans f2.py.old code> et renommer et renommer next_version_of_f2.py code> à f2.py code> p>
Ceci est certainement possible mais probablement invisible. p>
Le code d'édition devrait généralement être une action distincte de l'exécuter (même lorsque nous utilisons un seul outil pouvant faire les deux, comme beaucoup d'IDes modernes). P>
Imprimer ("ABCD") CODE>, il devrait être écrit de cette façon. li>
- c'est déroutant. Pour comprendre ce que f2.py fait, vous devez modeler mentalement l'intégralité de f1.py et f2.py, et il n'y a aucune indication de cela dans F2.py em>. li>
-
Il invite toutes sortes de situations difficiles à déboguer. STRUT> Que se passe-t-il si F1.py est exécuté deux fois en même temps? Et si deux différentes versions em> de f1.py sont exécutés en même temps? Ou si j'arrive à lire f2.py quand vous courez f1.py? Ou si je suis éditer em> f2.py et enregistrer mes modifications em> pendant que vous exécutez F1.py? Li>
- C'est un problème de sécurité. Pour f1.py to éditer f2.py, l'utilisateur (shell, web-serveur ou autre surface) appelant f1.py doit avoir des autorisations d'édition sur f2.py. Cela signifie que s'ils peuvent obtenir F1.py de faire quelque chose à partir de ce que vous avez voulu (spécifiquement, s'ils peuvent obtenir leur propre texte à la place de
"ABCD" code>), ils peuvent obtenir une exécution de code arbitraire < em> dans l'exécution de tous les autres! em> li>
ul>
Notez qu'il convient parfaitement à ce que le code génère ou modifie un autre code. Le problème est quand un programme em> (éventuellement couvrant plusieurs fichiers) modifie sa propre source em>. p>
Gelonida discute de certaines options, qui conviennent à certains contextes, tels que la gestion de la configuration ou des documents de construction spécifiques à l'utilisateur. . Cela dit, si vous connaissez des fonctions, des variables, des importations et d'autres bases de l'informatique, vous n'avez peut-être même pas besoin d'un fichier config.json ou d'un moteur de modèle. p>
reconsidérer le résultat final que vous essayez d'accomplir. strong> Faites encore plus de recherche / lecture, et si vous êtes toujours bloqué, démarrez une nouvelle question sur la tâche plus importante. p>
plaintes concernant xyz em> problèmes sont vieilles chapeau, alors voici comment faire ce que vous voulez, même si c'est affreux et que vous ne devriez vraiment pas. Je veux être clair que ce qui précède est une blague. Je ne l'ai pas testé et j'espère désespérément que cela ne résoudra aucun problème pour vous. P> P> F1.py h3>
Pour clarifier: vous souhaitez modifier les fichiers texte i> nommés "f2.py" et "f3.py", puis vous souhaitez exécuter les trois fichiers en tant que scripts Python. Est-ce correct? Est-il également une exigence que ces deux actions soient exécutées en exécutant i> "f1.py" comme un script python? I> Il semble que vous essayiez de faire quelque chose de très étrange et nous pourrions utiliser un peu de contexte plus.
Corrigez avec exécuter F1.py, je veux qu'il change les chaînes dans d'autres fichiers du dossier et les exécuter. Est-ce possible du tout?