picrust / q2-picrust2

QIIME 2 plugin for PICRUSt2
GNU General Public License v3.0
5 stars 5 forks source link

Directory not empty errors #11

Closed bitcometz closed 3 years ago

bitcometz commented 3 years ago

hello,

I run qiime picrust2 full-pipeline successfully yesterday. But I run into the the Directory not empty errors:

Traceback (most recent call last): File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/q2cli/commands.py", line 328, in call results = action(arguments) File "<path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/decorator.py:decorator-gen-211>", line 2, in full_pipeline File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/qiime2/sdk/action.py", line 240, in bound_callable output_types, provenance) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/qiime2/sdk/action.py", line 383, in _callableexecutor output_views = self._callable(view_args) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/q2_picrust2/_full_pipeline.py", line 70, in full_pipeline verbose=highly_verbose) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/picrust2/pipeline.py", line 203, in full_pipeline print_stdout=verbose, print_stderr=True) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/picrust2/util.py", line 265, in system_call_check print(stderr_log, file=sys.stderr) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/picrust2/util.py", line 789, in exit self.cleanup() File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/site-packages/picrust2/util.py", line 798, in cleanup _shutil.rmtree(self.name) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/shutil.py", line 484, in rmtree onerror(os.rmdir, path, sys.exc_info()) File "path/00.conda/envs/qiime2-2019.10/lib/python3.6/shutil.py", line 482, in rmtree os.rmdir(path) OSError: [Errno 39] Directory not empty: 'path/tmp/tmpr2r8zwcx'

Plugin error from picrust2:

[Errno 39] Directory not empty: 'path/tmp/tmpr2r8zwcx'

Best

gavinmdouglas commented 3 years ago

Hey there,

I believe this error is related to there being read-only files in the temporary directory that PICRUSt2 makes to work in. Similar problems are reported here: https://stackoverflow.com/questions/1557351/python-delete-non-empty-dir

What operating system are you using and were the final outputs created successfully?

bitcometz commented 3 years ago

hi, thanks for your reply.

I first set the tmpdir in my shell:

export TMPDIR="path/tmp" # which is 'drwxrwxrwx' (777)

my operating system is 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

And the outputs were not created successfully.

Thanks for your suggestions, I try to change os.rmdir(path) to os.system('rm -rf {}'.format(path)) to see if it works.

Best

bitcometz commented 3 years ago

it works now !

hoohugokim commented 2 years ago

Exactly same problem as written here was there for me in my HPC cluster.

hi, thanks for your reply.

I first set the tmpdir in my shell:

export TMPDIR="path/tmp" # which is 'drwxrwxrwx' (777)

my operating system is 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

And the outputs were not created successfully.

Thanks for your suggestions, I try to change os.rmdir(path) to os.system('rm -rf {}'.format(path)) to see if it works.

Best

The solution suggested by @bitcometz worked, by substituting Line 722 in shutil.py. I think it has to do with the NFS server setting (/tmp synchronized among compute nodes), as I'm encountering the following error messages.

rm: cannot remove '/tmp/tmp_7dnte1b/.nfs0000000003d400b700000e4a': Device or resource busy
rm: cannot remove '/tmp/tmp_7dnte1b/.nfs0000000003d400b800000e4b': Device or resource busy

The results are there, despite the error above prompting three times.