J'ai un groupe de code hérité pour coder des e-mails bruts contenant de nombreuses instructions d'impression telles que
def write(self, data): if data == '\n': data = '\r\n' return self._file.write(data)
6 Réponses :
(Je ne sais pas comment / si cela convient à l'emballage que vous souhaitez utiliser, mais au cas où ...)
dans Python 2.6 (et de nombreuses versions précédentes), vous pouvez supprimer la nouvelle ligne en ajoutant une virgule à la Fin de la déclaration d'impression, comme dans: p> L'inconvénient de l'utilisation de cette approche est que la syntaxe d'impression et le comportement sont modifiés dans Python3. P> P> P> P> >
Je pense que je définirais une nouvelle fonction writeine code> dans une classe de fichier héritée / flux et mettez à jour le code pour utiliser
writeeline code> au lieu de
imprimer code> . L'objet de fichier lui-même peut contenir le style de fin de ligne en tant que membre. Cela devrait vous donner une certaine flexibilité dans le comportement et rendre le code un peu plus clair, c'est-à-dire
f.writeline (texte) code> par opposition à
f.write (texte + ligne_end) code>. < / p>
dans python2.x, je pense que vous pouvez faire:
print("some msg", end = "\r\n", file = f)
Je préfère également votre troisième solution, mais pas besoin d'utiliser F.Write, toute fonction écrite d'utilisateur / appelable ferait. Ainsi, les prochains changements deviendraient faciles. Si vous utilisez un objet, vous pouvez même masquer le fichier cible à l'intérieur, supprimez ainsi un bruit syntaxique comme un fichier ou une sorte de nouvelle ligne. P>
Une impression trop mauvaise est une instruction dans Python 2.x, avec Python 3.x Imprimer pourrait simplement être surchargé par quelque chose de défini par l'utilisateur. P>
Vous devez résoudre votre problème maintenant et pour toujours en définissant une nouvelle fonction de sortie. Imprimez une fonction, cela aurait été beaucoup plus facile.
Je suggère d'écrire une nouvelle fonction de sortie, imprimant autant que possible la signature moderne de la fonction d'impression (car la réutilisation d'une bonne interface est bonne), par exemple: P >
def output(*items, end="\n", file=sys.stdout): pass
+1: Ditch Imprimer code> en permanence. Pensez-y comme un outil de débogage, pas une partie réelle du code de production.
Python a des modules à la fois pour gérer les en-têtes de courrier électronique et HTTP de manière simple. Je vous suggère de les utiliser au lieu de résoudre des problèmes déjà résolus à nouveau. P>
+1 Bonne suggestion, Lennart. Nous avons tous "humoré" l'OP en tentative de "tirer parti du code existant", mais en fonction de sa situation, vous avez raison, nous devrions toujours nous souvenir de ces "piles incluses" code>
Nous utilisons réellement des cours dérivés de ceux du package de messagerie STDLIB. Par exemple, email.Generator (Python 2.4) utilise fortement Imprimer >>. Tout cela est bien et bon pour les emails (seulement besoin \ n), mais nous utilisons également le code pour analyser, modifier et régénérer la demande HTTP (qui nécessite \ r \ n).
Vous utilisez le module de messagerie pour générer des demandes HTTP? Pas étonnant que vous obteniez des problèmes.