Caution
Buildbot no longer supports Python 2.7 on the Buildbot master.
2.5.11.49. SetPropertyFromCommand¶
- class buildbot.steps.shell.SetPropertyFromCommand¶
Note
This step is being migrated to new-style.
A new-style equivalent is provided as SetPropertyFromCommand
.
This should be inherited by any custom steps until Buildbot 3.0 is released.
Regular uses without inheritance are not affected.
This buildstep is similar to ShellCommand
, except that it captures the output of the command into a property.
It is usually used like this:
from buildbot.plugins import steps
f.addStep(steps.SetPropertyFromCommand(command="uname -a", property="uname"))
This runs uname -a
and captures its stdout, stripped of leading and trailing whitespace, in the property uname
.
To avoid stripping, add strip=False
.
The property
argument can be specified as an Interpolate object, allowing the property name to be built from other property values.
Passing includeStdout=False
(defaults to True
) stops capture from stdout.
Passing includeStderr=True
(defaults to False
) allows capture from stderr.
The more advanced usage allows you to specify a function to extract properties from the command output.
Here you can use regular expressions, string interpolation, or whatever you would like.
In this form, extract_fn
should be passed, and not Property
.
The extract_fn
function is called with three arguments: the exit status of the command, its standard output as a string, and its standard error as a string.
It should return a dictionary containing all new properties.
Note that passing in extract_fn
will set includeStderr
to True
.
def glob2list(rc, stdout, stderr):
jpgs = [l.strip() for l in stdout.split('\n')]
return {'jpgs': jpgs}
f.addStep(SetPropertyFromCommand(command="ls -1 *.jpg", extract_fn=glob2list))
Note that any ordering relationship of the contents of stdout and stderr is lost. For example, given:
f.addStep(SetPropertyFromCommand(
command="echo output1; echo error >&2; echo output2",
extract_fn=my_extract))
Then my_extract
will see stdout="output1\noutput2\n"
and stderr="error\n"
.
Avoid using the extract_fn
form of this step with commands that produce a great deal of output, as the output is buffered in memory until complete.