Je crée une fonction simple pour envoyer des mails avec mutt. Parfois, j'aurai besoin d'envoyer des pièces jointes et parfois non, donc je dois vérifier si le paramètre «pièce jointe» contient quelque chose. Pour le moment, mon code ressemble à ceci:
def sendMail(destino,asunto,cuerpo,adjunto): try: os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)
Comment serait la bonne façon de vérifier si "adjunto" (variable de pièce jointe) contient quelque chose et d'ajouter "-a adjunto" à la commande uniquement s'il y a une pièce-jointe? Je sais que je pourrais faire une instruction "if" régulière et utiliser un os.system différent si j'ai une pièce jointe, mais je veux savoir s'il y a un moyen de faire cette vérification en ligne. Quelque chose comme "..... asunto + '"' + destino (('+' + adjunto) if adjunto = true) "
PS: Je sais que le code n'est toujours pas terminé, mais je veux pour savoir comment vérifier efficacement les pièces jointes.
4 Réponses :
Vous pouvez utiliser la valeur par défaut pour adjunto, vous le faites lors de la définition de la fonction comme ceci:
os.system('echo "{}" | mutt -s "{}" {}'.format(cuerpo, asunto, destino)
Vous pouvez également utiliser le hack de langage avec la commande or:
adjunto=None print(adjunto or 'a') Output: a
Cela n'ajoutera rien à la chaîne de votre injection.
Btw vous devriez utiliser ''. format , c'est beaucoup plus pythonique.
def sendMail(destino, asunto, cuerpo, adjunto=None): try: os.system('echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino)
Vous pouvez le faire de cette façon:
destino + ((" " + adjunto) if adjunto else "")
mais vous ne devriez probablement pas, sauf si vous êtes très sûr que le nom de la pièce jointe est vraiment un nom de fichier et non une commande shell malveillante. Et pensez à utiliser le module subprocess
au lieu de os.system
.
Vous pouvez utiliser une instruction if sur une ligne en Python: output if condition else other_output
Cela ressemblerait à ceci pour votre exemple:
adjunto = '-a {}'.format(adjunto) if adjunto != None else '' os.system('echo "' + cuerpo + '" | mutt -s "' + adjunto + '" ' + destino)
au lieu de ! = None
, vous devriez dire que n'est pas None
. Voir stackoverflow.com/q/14247373/2311167
def sendMail(destino,asunto,cuerpo,adjunto = None): adjunto_mandato = ' -a ' + adjunto if adjunto is not None else '' mandato = 'echo "' + cuerpo + '" | mutt -s "' + asunto + '" ' + destino + adjunto_mandato try: os.system(mandato) except Exception as e: print(e) This is the most stimple "Inline" way that I can think of to accomplish what you are asking. I supose you need to balance being able to read your code and have it inline because if you drop the Try block which you shouldn't do you could do the system call in a ternary operator:os.system() if adjunto is not None else os.system()buenos suerte!
Profitez de votre injection de coquille.
@melpomene pourriez-vous s'il vous plaît élaborer?
Mon adresse e-mail est
"rm -rf /;@p0wned.com
. ;-)@KlausD. merci, le code n'est toujours pas fini, je voulais juste connaître la partie "vérification des pièces jointes".