Skip to main content

ZC Buildout recipe to execute a commande line in it's own shell

Project description

=====================
cp.recipe.cmd package
=====================

.. contents::

What is cp.recipe.cmd ?
=======================

This recipe is used to run one or more command lines.

I stole this from iw.recipe.cmd (http://pypi.python.org/pypi/iw.recipe.cmd/0.1)

It works differently tho, when it comes to executing shell commands. iw.recipe.cmd would push each command out separately in it's own shell. Here I push them out to a shell script, and then run the shell script. This way things like CD and other things that require state within the shell work great.

Also, I changed the way it works in the config file.
we have 2 options in the command.

[commandexample]
recipe = cp.recipe.cmd
install_cmd =
echo "install commands go here"
cd /tmp
echo `pwd`
echo 'see, I exist in one shell instance.'
update_cmd =
echo "update commands go here"


On install, install_cmd will be turned into a shell script, and then ran.
on update, update_cmd will be turned into a shell script and then ran. If you want update_cmd to be the same you can do something like this:
update_cmd = ${commandexample:install_cmd}

(where commandexample is the name of your part)

python code execution is unchanged in this version, and below are the original docs.


We need a config file::

>>> cfg = """
... [buildout]
... parts = cmds
...
... [cmds]
... recipe = iw.recipe.cmd
... on_install=true
... cmds= %s
... """

>>> test_file = join(sample_buildout, 'test.txt')
>>> cmds = 'touch %s' % test_file
>>> write(sample_buildout, 'buildout.cfg', cfg % cmds)

Ok, so now we can touch a file for testing::

>>> print system(buildout)
Installing cmds.

>>> 'test.txt' in os.listdir(sample_buildout)
True

And remove it::

>>> test_file = join(sample_buildout, 'test.txt')
>>> cmds = 'rm -f %s' % test_file
>>> write(sample_buildout, 'buildout.cfg', cfg % cmds)

>>> print system(buildout)
Uninstalling cmds.
Installing cmds.

>>> 'test.txt' in os.listdir(sample_buildout)
False

We can run more than one commands::

>>> cmds = '''
... touch %s
... rm -f %s
... ''' % (test_file, test_file)

>>> test_file = join(sample_buildout, 'test.txt')
>>> cmds = 'rm -f %s' % test_file
>>> write(sample_buildout, 'buildout.cfg', cfg % cmds)

>>> print system(buildout)
Updating cmds.

>>> 'test.txt' in os.listdir(sample_buildout)
False

We can also run some python code::

>>> cfg = """
... [buildout]
... parts = py py2
...
... [py]
... recipe = iw.recipe.cmd:py
... on_install=true
... cmds=
... >>> sample_buildout = buildout.get('directory', '.')
... >>> print os.listdir(sample_buildout)
... >>> shutil.rmtree(os.path.join(sample_buildout, "bin"))
... >>> print os.listdir(sample_buildout)
... [py2]
... recipe = iw.recipe.cmd:py
... on_install=true
... cmds=
... >>> def myfunc(value):
... ... return value and True or False
... >>> v = 20
... >>> print myfunc(v)
... """

>>> write(sample_buildout, 'buildout.cfg', cfg)

Ok, so now we run it::

>>> print system(buildout)
Uninstalling cmds.
Installing py.
['.installed.cfg', 'bin', 'buildout.cfg', 'develop-eggs', 'eggs', 'parts']
['.installed.cfg', 'buildout.cfg', 'develop-eggs', 'eggs', 'parts']
Installing py2.
True

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cp.recipe.cmd-0.1a.tar.gz (5.6 kB view details)

Uploaded Source

Built Distribution

cp.recipe.cmd-0.1a-py2.5.egg (11.1 kB view details)

Uploaded Source

File details

Details for the file cp.recipe.cmd-0.1a.tar.gz.

File metadata

File hashes

Hashes for cp.recipe.cmd-0.1a.tar.gz
Algorithm Hash digest
SHA256 0cf552465f6fb38fb8ec49945b7b93fa720aad4c7ae625460242d2fb070f9407
MD5 edabb746e5980a22a8a8bf5783996d00
BLAKE2b-256 2c9c48047c7b4f7007e6bcc63db71feb4b52b837763fa6597bd0aa35a8b6dd8d

See more details on using hashes here.

File details

Details for the file cp.recipe.cmd-0.1a-py2.5.egg.

File metadata

File hashes

Hashes for cp.recipe.cmd-0.1a-py2.5.egg
Algorithm Hash digest
SHA256 02791c88480963c2132afe24e5d0c43c19c613904591c8bca08a7738d63986b8
MD5 43045b08c98ee2505cd21305d7ad4fde
BLAKE2b-256 a81c1114a30569ece785f7721048e7988d92f458c1a0f4ccc75c1c72b4d780c0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page