Zum Beispiel
from fabric.api import run
def test(flag=False):
if flag is True:
run("echo hoge")
else:
run("echo fuga")
Oder schreiben
$ fab -H host test:flag=True
Wenn ich so etwas versuche
fuga
wird ausgegeben.
Das in Fabric übergebene Argument lautet str.
>>> "True" is True
False
Es muss auf irgendeine Weise konvertiert werden.
Einfach besetzen.
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
Jedoch,
$ fab -H host test:flag=false
Ich werde sterben. "True" / "False" kann in einen Booleschen Wert umgewandelt werden, aber "true" / "false" kann nicht umgewandelt werden
Es gibt so einen Typen in der Standardbibliothek.
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")
Schreiben Sie so. Mit diesem können Sie "y", "t", on "und andere Zeichenfolgen anstelle von" True "verwenden.
Wenn Sie jedoch "def test (flag = True):" oder das Standardargument als booleschen Typ schreiben, wird ein Fehler ausgegeben.
Bereiten Sie einen Kompromissplan für diese Zeit vor. Übrigens mache ich auch eine Ausnahme, falls ich in einer Zeichenfolge stecke, die nicht in strtobool () konvertiert werden kann.
def __strtobool(arg):
try:
if type(arg) == type(True):
return arg
else:
return bool(strtobool(arg))
except ValueError:
...
Es wird immer schwieriger.
Recommended Posts