2 votes

L'équivalent du write-mime-multipart d'Ubuntu ?

Je voudrais générer un document multipartite codé en mime pour l'utiliser comme données utilisateur sur les instances EC2.

Sous Ubuntu, on est censé utiliser write-mime-multipart pour ce faire, conformément à ces instructions .

Quelqu'un sait-il quel serait l'équivalent en ligne de commande pour OSX ?

Merci !

3voto

den980 Points 63

J'ai trouvé une solution simple. Le programme d'Ubuntu write-mime-multipart est en fait un script Python, disponible ici (ou sur une distro Ubuntu je suppose).

J'ai simplement téléchargé ce script pour l'utiliser. Peut-être pas idéal en ce qui concerne le contrôle de version, mais correct pour un simple script je pense.

De meilleures approches sont les bienvenues !

0 votes

Merci de votre attention ! C'est très bien. Je l'ai changé en #!/usr/local/bin/Python (au lieu de spécifier v2.6) et j'ai installé le script dans /usr/local/Cellar/write-mime-multipart, chmod +x et symlink dans /usr/local/bin pour être plus proche de brew. Cela a bien fonctionné. Vous pouvez aussi lancer une instance Docker d'Ubuntu pour l'obtenir ;-)

0 votes

Santé. C'est une bonne approche !

0voto

sshevlyagin Points 111

Je n'ai pas réussi à faire fonctionner le script, alors j'en ai créé un autre. ici

#!/usr/local/bin/python
# Usage
# python utils/multi.py /path/to/cloud.cfg:text/cloud-config /path/to/script.sh:text/x-shellscript

import sys
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

if len(sys.argv) == 1:
    print("%s input-file:type ..." % (sys.argv[0]))
    sys.exit(1)

combined_message = MIMEMultipart()
for i in sys.argv[1:]:
    (filename, format_type) = i.split(":", 1)
    with open(filename) as fh:
        contents = fh.read()
    sub_message = MIMEText(contents, format_type, sys.getdefaultencoding())
    sub_message.add_header('Content-Disposition', 'attachment; file    name="%s"' % (filename))
    combined_message.attach(sub_message)

msg = email.message_from_string(combined_message.as_string())

for part in msg.walk():
    if part.get_content_maintype() == 'text':
        if part['Content-Transfer-Encoding'] in {'quoted-printable', 'base64'}:
            payload = part.get_payload(decode=True)
            del part['Content-Transfer-Encoding']
            part.set_payload(payload)
            email.encoders.encode_7or8bit(part)

# Send the modified message to stdout
print(msg.as_bytes().decode(encoding='UTF-8'))

Sources : Question StackOverflow Docks CloudInit

0 votes

Veuillez répondre avec plus qu'un lien. La réponse doit être compréhensible lorsque les liens disparaissent.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X