답변:
Fabric 2 태스크 인수 문서 :
http://docs.pyinvoke.org/en/latest/concepts/invoking-tasks.html#task-command-line-arguments
Fabric 1.X는 작업에 인수를 전달하기 위해 다음 구문을 사용합니다.
fab task:'hello world'
fab task:something='hello'
fab task:foo=99,bar=True
fab task:foo,bar
Fabric 문서 에서 자세한 내용을 읽을 수 있습니다 .
hello world
그래도 따옴표 가 필요한 것 같습니까?
world
새로운 작업 이라고 생각하기 때문에 해당 예제에서 따옴표가 필요할 것입니다 .
'hello world'
파이썬 문자열은 'hello world'
이지만 "hello world"
결과는 hello world
(대부분의 사람들이 원하는 것입니다).
bar=True
패브릭 명령은 bar='True'
부울 값이 아닌 것으로 전달됩니다.
패브릭 인수는 매우 기본적인 문자열 구문 분석으로 이해되므로 보내는 방법에 약간주의해야합니다.
다음은 다음 테스트 함수에 인수를 전달하는 여러 방법의 몇 가지 예입니다.
@task
def test(*args, **kwargs):
print("args:", args)
print("named args:", kwargs)
$ fab "test:hello world"
('args:', ('hello world',))
('named args:', {})
$ fab "test:hello,world"
('args:', ('hello', 'world'))
('named args:', {})
$ fab "test:message=hello world"
('args:', ())
('named args:', {'message': 'hello world'})
$ fab "test:message=message \= hello\, world"
('args:', ())
('named args:', {'message': 'message = hello, world'})
방정식에서 쉘을 제거하기 위해 여기에 큰 따옴표를 사용하지만 일부 플랫폼에서는 작은 따옴표가 더 좋을 수 있습니다. 또한 fabric에서 구분 기호를 고려하는 문자의 이스케이프에 유의하십시오.
문서의 자세한 내용 : http://docs.fabfile.org/en/1.14/usage/fab.html#per-task-arguments
Fabric 2에서는 작업 함수에 인수를 추가하기 만하면됩니다. 예를 들어, 전달하는 version
작업에 인수를 deploy
:
@task
def deploy(context, version):
...
다음과 같이 실행하십시오.
fab -H host deploy --version v1.2.3
Fabric은 옵션을 자동으로 문서화합니다.
$ fab --help deploy
Usage: fab [--core-opts] deploy [--options] [other tasks here ...]
Docstring:
none
Options:
-v STRING, --version=STRING
누군가 fabric2의 한 작업에서 다른 작업으로 매개 변수를 전달하려는 경우 환경 사전을 사용하십시오.
@task
def qa(ctx):
ctx.config.run.env['counter'] = 22
ctx.config.run.env['conn'] = Connection('qa_host')
@task
def sign(ctx):
print(ctx.config.run.env['counter'])
conn = ctx.config.run.env['conn']
conn.run('touch mike_was_here.txt')
그리고 실행 :
fab2 qa sign