def monkey_patch_string(file_name, old_string, new_string):
# Read in the file
with open(file_name, 'r') as f :
filedata = f.read()
# Replace the target string
filedata = filedata.replace(old_string, new_string)
# Write the file out again
with open(file_name, 'w') as f:
f.write(filedata)
if __name__ == '__main__':
file_name = sys.argv[1]
old_string = sys.argv[2]
new_string = sys.argv[3]
monkey_patch_string(file_name, old_string, new_string)
J'ai ce fichier que j'utilise comme un processus pour remplacer les chaînes pendant le déploiement. Son exécution est faite à distance via un script de tissu.Chaîne à remplacer dans python ubuntu ne fonctionne pas
old_string = '"{}"'.format('$CONFIG_DIR')
new_string = '"{}"'.format('$CONFIG_DIR --logfile /var/www/' + domain_name + '/logs/transmission.log')
run('python deployment/monkey_patch.py /etc/default/transmission-daemon '+ old_string + ' ' + new_string)
Mais plutôt que de remplacer l'ancienne chaîne à la nouvelle chaîne remplace le fichier entier avec des valeurs de déchets de la nouvelle chaîne.
J'ai même copié le fichier à mes fenêtres env et répété exactement les mêmes étapes et cela fonctionne mais sur Ubuntu. Pendant tout ce temps, je suis un utilisateur root et de toute façon il écrit quelque chose dans le fichier, donc ce n'est pas un problème de permission.
J'ai essayé ce fichier pour d'autres chaînes et fichiers et cela fonctionne. Je soupçonne que c'est quelque chose à voir avec le symbole du dollar et le module de tissu, mais je n'arrive pas à comprendre exactement. Quelqu'un a la moindre idée?