The 'wait-for' command line utility
source link: http://blog.minimum.se/2016/09/08/wait-for-python-cli-utility.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
The 'wait-for' command line utility
Sep 8, 2016
As a software developer, quite often there are things you cannot do until some semi-long process has completed. For example, waiting for a new build, an automated test run or when deploying to a cluster and you want to know when all machines have finished updating.
If you’re running a local build you would do build ; show-notification 'build
done'
(e.g. on Debian/Ubuntu you’d use notify-send
for this). However,
if you’re waiting for a build on a CI machine you typically have to reload some
webpage to see if it’s done or query job progress by curling some API.
To be able to get a notification when such jobs are done, I wrote a Python
script called wait-for
that repeatedly runs some command until the command
prints some particular string (or returns a specified exit code, or prints
something different from what it printed last time it was invoked).
This script makes it easy to do stuff like for example:
$ # Suppose OpenSSL (or similar) has announced that they will publish a new
$ # security fix today and you want a notification when they publish the details.
$ CHANGELOG="https://www.openssl.org/news/changelog.txt"
$ wait-for --stdout-change "curl -s $CHANGELOG" ; notify-send "It's published"
$ # Suppose you have a scruffy old Jenkins server, and you want to wait for the
$ # next successful build and then deploy that to some staging environment.
$ URL="http://jenkins.ecorp.com/job/SOME_JOB_NAME/lastSuccessfulBuild/api/json"
$ wait-for --stdout-change "curl -s $URL | jq .number" ; deploy-latest-successful
The wait-for
source code is available here; it even has a few
tests. The
tests were written in bash because that was obviously a good idea (my
condolences to the kittens that died as a result).
EDIT: After posting this, someone pointed out the fact that
watch --chgexit cmd
covers the above use case, so wait-for is only useful
if you actually need --stdout-contains
or --stdout-equals
etc.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK