Skip to content
Snippets Groups Projects
Commit 6a91c938 authored by Paul McCarthy's avatar Paul McCarthy :mountain_bicyclist:
Browse files

Merge branch 'rf/submit' into 'master'

Rf/submit

See merge request fsl/fslpy!208
parents 6d59ac9e 659cb752
No related branches found
No related tags found
No related merge requests found
...@@ -23,8 +23,11 @@ Changed ...@@ -23,8 +23,11 @@ Changed
* The :func:`.gifti.relatedFiles` function now supports files with * The :func:`.gifti.relatedFiles` function now supports files with
BIDS-style naming conventions. BIDS-style naming conventions.
* The :func:`.run.run` and :func:`.run.runfsl` functions now pass through * The :func:`.run.run` and :func:`.run.runfsl` functions now pass through any
any additional keyword arguments to ``subprocess.Popen``. additional keyword arguments to ``subprocess.Popen`` or, if ``submit=True``,
to :func:`fslsub.submit`.
* The :func:`.fslsub.submit` function now accepts an ``env`` option, allowing
environment variables to be specified.
* The :func:`.run.runfsl` function now raises an error on attempts to * The :func:`.run.runfsl` function now raises an error on attempts to
run a command which is not present in ``$FSLDIR/bin/`` (e.g. ``ls``). run a command which is not present in ``$FSLDIR/bin/`` (e.g. ``ls``).
* The :mod:`.bids` module has been updated to support files with any * The :mod:`.bids` module has been updated to support files with any
......
...@@ -68,7 +68,8 @@ def submit(*command, ...@@ -68,7 +68,8 @@ def submit(*command,
output=None, output=None,
flags=False, flags=False,
multi_threaded=None, multi_threaded=None,
verbose=False): verbose=False,
env=None):
""" """
Submits a given command to the cluster Submits a given command to the cluster
...@@ -99,6 +100,7 @@ def submit(*command, ...@@ -99,6 +100,7 @@ def submit(*command,
- <threads>: number of threads to run - <threads>: number of threads to run
:arg verbose: If True, use verbose mode :arg verbose: If True, use verbose mode
:arg env: Dict containing environment variables
:return: string of submitted job id :return: string of submitted job id
""" """
...@@ -136,7 +138,7 @@ def submit(*command, ...@@ -136,7 +138,7 @@ def submit(*command,
base_cmd.extend(prepareArgs(command)) base_cmd.extend(prepareArgs(command))
return runfsl(*base_cmd).strip() return runfsl(*base_cmd, env=env).strip()
def info(job_id): def info(job_id):
......
...@@ -168,7 +168,7 @@ def run(*args, **kwargs): ...@@ -168,7 +168,7 @@ def run(*args, **kwargs):
All other keyword arguments are passed through to the ``subprocess.Popen`` All other keyword arguments are passed through to the ``subprocess.Popen``
object (via :func:`_realrun`), unless ``submit=True``, in which case they object (via :func:`_realrun`), unless ``submit=True``, in which case they
are ignored. are passed through to the :func:`.fslsub.submit` function.
:returns: If ``submit`` is provided, the return value of :returns: If ``submit`` is provided, the return value of
:func:`.fslsub` is returned. Otherwise returns a single :func:`.fslsub` is returned. Otherwise returns a single
...@@ -208,7 +208,7 @@ def run(*args, **kwargs): ...@@ -208,7 +208,7 @@ def run(*args, **kwargs):
# submit - delegate to fslsub # submit - delegate to fslsub
if submit is not None: if submit is not None:
return fslsub.submit(' '.join(args), **submit) return fslsub.submit(' '.join(args), **submit, **kwargs)
# Run directly - delegate to _realrun # Run directly - delegate to _realrun
stdout, stderr, exitcode = _realrun( stdout, stderr, exitcode = _realrun(
......
...@@ -306,29 +306,33 @@ def test_run_submit(): ...@@ -306,29 +306,33 @@ def test_run_submit():
mkexec(op.expandvars('$FSLDIR/bin/fsltest'), test_script) mkexec(op.expandvars('$FSLDIR/bin/fsltest'), test_script)
jid = run.run('fsltest', submit=True) jid = run.run('fsltest', submit=True)
assert jid == '12345' assert jid == '12345'
stdout, stderr = fslsub.output(jid) stdout, stderr = fslsub.output(jid)
assert stdout == 'test_script running\n' assert stdout == 'test_script running\n'
assert stderr == '' assert stderr == ''
# or can pass submit opts as a dict
kwargs = {'name' : 'abcde', 'ram' : '4GB'} kwargs = {'name' : 'abcde', 'ram' : '4GB'}
jid = run.run('fsltest', submit=kwargs) jid = run.run('fsltest', submit=kwargs)
assert jid == '12345' assert jid == '12345'
stdout, stderr = fslsub.output(jid) stdout, stderr = fslsub.output(jid)
experr = '\n'.join(['{}: {}'.format(k, kwargs[k]) experr = '\n'.join(['{}: {}'.format(k, kwargs[k])
for k in sorted(kwargs.keys())]) + '\n' for k in sorted(kwargs.keys())]) + '\n'
assert stdout == 'test_script running\n'
assert stderr == experr
# or can pass submit opts as kwargs
kwargs = {'name' : 'abcde', 'ram' : '4GB'}
jid = run.run('fsltest', submit=True, **kwargs)
assert jid == '12345'
stdout, stderr = fslsub.output(jid)
experr = '\n'.join(['{}: {}'.format(k, kwargs[k])
for k in sorted(kwargs.keys())]) + '\n'
assert stdout == 'test_script running\n' assert stdout == 'test_script running\n'
assert stderr == experr assert stderr == experr
def test_run_streams(): def test_run_streams():
""" """
""" """
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment