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.
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
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