Я не могу получить результат выполнения скрипта через сингулярность.
У меня есть скрипт python, в конце которого результат сохраняется с помощью:
...
with open('saveOut.pkl','wb') as myFile:
pickle.dump(myTable,myFile)
Я хочу запустить этот скрипт с сингулярностью на удаленной машине. Поскольку я изучаю сингулярность, я создал образ debian «песочница» (еще не скомпилированный в один файл «img») в каталоге /tmp/debian
; в этом образе я скопировал скрипт Python test.py
в /usr/src
и запускаю его с помощью команды:
sudo singularity exec /tmp/debian python3.5 /usr/src/test.py
Проблема:
Это работает хорошо, пока я отображаю только результаты. с описанным выше примером pickle я нигде не получаю никакого файла saveOut.pkl
: этот файл просто никуда не записывается, но я не вижу никакого сообщения. Я попытался написать явный путь в скрипте Python. Например /usr/src/saveOut.pkl
, но это то же самое.
Как я мог написать результат?
What was your expected result i.e. in which directory did you expect to find the output file?
Я ожидаю файл saveOutput.pkl
где угодно, в контейнере или нет, мне все равно, где именно. На данный момент я его вообще не получаю: ни в текущем каталоге контейнера, ни в /usr/src/
контейнера, ни на хосте, ни где-либо еще.
Did you look for it on the host or in the container?
оба, нигде не вижу
Здесь происходит то, что ваш скрипт Python записывает файл рассола в его текущее местоположение (/usr/src/ в контейнере). Затем, поскольку вывод вашего сценария не является постоянным (из-за того, что песочница недоступна для записи при выполнении), он удаляется в конце выполнения.
Я считаю, что вы могли бы изменить свой сценарий:
with open('/opt/saveOut.pkl','wb') as myFile:
pickle.dump(myTable,myFile)
а затем привяжите локальный каталог и получите результат, который вы ищете:
sudo singularity exec -B ./:/opt /tmp/debian python3.5 /usr/src/test.py
Во всяком случае, это сработало для меня.
Каков был ваш ожидаемый результат, то есть в каком каталоге вы ожидали найти выходной файл? Вы искали его на хосте или в контейнере? По умолчанию Singularity будет делиться с контейнером только вашей домашней папкой на хосте.