[PYTHON] [Fabric] J'étais accro à l'utilisation de booléen comme argument, alors notez les contre-mesures.

Contexte

Par exemple

from fabric.api import run

def test(flag=False):
    if flag is True:
        run("echo hoge")
    else:
        run("echo fuga")

Ou écrire

$ fab -H host test:flag=True

Quand j'essaye de faire quelque chose comme ça fuga est sorti.

L'argument passé dans Fabric est str.

>>> "True" is True
False

Il doit être converti d'une manière ou d'une autre.

contre-mesure

Partie 1 casting

Jetez simplement.

from fabric.api import run

def test(flag=True):
    if bool(flag) is True:
        run("echo hoge")
    else:
        run("echo fuga")
$ fab -H host test:flag=False
fuga

cependant,

$ fab -H host test:flag=false

Je vais mourir. " True " / " False " peut être converti en booléen, mais"true"/"false"ne peut pas être converti

Partie 2 strtobool

Il y a un tel type dans la bibliothèque standard.

from distutils.util import strtobool
from fabric.api import run

def __strtobool(arg):
    return bool(strtobool(arg))

def test(flag="True"):
    flag = __strtobool(flag)
    if flag is True:
        run("echo hoge")
    else:
        run("echo fuga")

Écrivez comme ça. Avec cela, vous pouvez utiliser différentes chaînes de caractères telles que "y", "t", on "au lieu de`" True "".

Cependant, si vous écrivez def test (flag = True): ou l'argument par défaut comme type booléen, une erreur sera renvoyée.

Préparez un plan de compromis pour cette période. Au fait, je prendrai également une exception au cas où je serais coincé dans une chaîne qui ne peut pas être convertie en strtobool ().

def __strtobool(arg):
    try:
        if type(arg) == type(True):
            return arg
        else:
            return bool(strtobool(arg))
    except ValueError:
        ...

Cela devient de plus en plus gênant.

Recommended Posts

[Fabric] J'étais accro à l'utilisation de booléen comme argument, alors notez les contre-mesures.
J'étais accro à essayer Cython avec PyCharm, alors prenez note
Notez que j'étais accro à la configuration de TensowFlow
Une histoire à laquelle j'étais accro en spécifiant nil comme argument de fonction dans Go
Notez que j'étais accro à accéder à la base de données avec mysql.connector de Python en utilisant une application Web
Je suis tombé sur l'utilisation de MoviePy, alors prenez note
Je voulais utiliser le module de recherche d'Ansible2, mais cela a pris du temps, alors prenez note
Ne prenez pas une instance d'une classe d'exception Python directement comme argument de la classe d'exception!
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
En ce qui concerne le type de processus écrit dans le fichier Procfile de honcho, j'y ai été accro pendant plus d'une heure parce que je ne pouvais pas utiliser -, donc je l'écrirai comme une émission.
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
Une note à laquelle j'étais accro lors de l'émission d'un bip sous Linux
J'ai essayé de créer une expression régulière de "date" en utilisant Python
Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
Quand j'ai essayé de gratter en utilisant des requêtes en python, j'étais accro à SSLError, donc un mémo de contournement
Une histoire sur l'écriture d'AWS Lambda et de devenir un peu accro aux valeurs par défaut des arguments Python
J'ai essayé de trouver la différence entre A + = B et A = A + B en Python, alors notez
Notez la solution car django n'a pas pu s'installer avec pip
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Enregistrez le tableau numpy dans un fichier wav à l'aide du module wave
AtCoder AGC 041 C - J'étais accro à la recherche complète de Domino Quality
Soudain, j'avais besoin de travailler sur un projet utilisant Python et Pyramid, donc une note sur la façon dont j'étudie
Mémorandum de travail (pymongo) Partie 3. Je ne veux pas le réexaminer, alors prenez-en note (agrégé)
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
Notez que j'étais accro au script npm ne passant pas dans l'environnement de vérification
Je voulais collecter beaucoup d'images, j'ai donc essayé d'utiliser "google image download"
Remarque: Signification de spécifier uniquement * (astérisque) comme argument dans la définition de fonction de Python
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Prenez note de la liste des utilisations de base de Pandas
Une histoire à laquelle j'étais accro chez np.where
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Note Python: Le mystère de l'attribution d'une variable à une variable
Notez ce que vous voulez faire à l'avenir avec Razpai
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'étais en charge de la maintenance du script Fabric, mais je ne sais pas.> <À ceux qui
J'ai essayé d'automatiser la construction d'un environnement pratique à l'aide de l'API SoftLayer d'IBM Cloud
Comment créer un LINE BOT 004 interactif (répondre à la date de clôture d'une société cotée)
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai créé un éditeur de texte simple en utilisant PyQt
[Réparer] J'étais accro au jugement alphanumérique des chaînes Python
Quand on m'a montré un graphique comme l'analyse en composantes principales, «les distributions de ces deux données ne sont pas significativement différentes»?
J'étais un peu accro à l'installation de Python3.3 + mod_wsgi3.4 sur Sakura VPS (CentOS), donc une note de révision
J'ai essayé de créer un site qui permet de voir facilement les informations mises à jour d'Azure
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
[Twitter] Je veux faire des tweets téléchargés (de mon compte) dans un beau CSV
Je veux clarifier la question de la méthode "__init__" et de l'argument "self" de la classe Python.
Une histoire à laquelle j'étais accro à appeler Lambda depuis AWS Lambda.
Comprendre la fonction de convolution en utilisant le traitement d'image comme exemple
Le record auquel j'étais accro en mettant MeCab dans Heroku
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Format lors du passage d'une longue chaîne comme argument de python
Précautions lors de l'utilisation d'une liste ou d'un dictionnaire comme argument par défaut
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬