Написать выходы из скрипта впадающих в особенность
Я не могу получить выходные данные скрипта через единственное число.
У меня есть скрипт 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
Эта проблема:
Это работает хорошо, пока я только показал результаты. с примером рассола, описанным выше, я не получаю saveOut.pkl
файл где угодно: этот файл просто нигде не записан, но я не вижу ни одного сообщения. Я попытался написать явный путь в скрипте Python. Например /usr/src/saveOut.pkl
, но это то же самое.
Как я мог написать результат?
Каков был ваш ожидаемый результат, т.е. в каком каталоге вы ожидали найти выходной файл?
Я ожидаю файл saveOutput.pkl
где-нибудь, в контейнере или нет, мне все равно, где. В настоящее время я не получаю это вообще: ни в текущем каталоге контейнера, ни в контейнере /usr/src/
ни на хосте, ни где угодно.
Вы искали его на хосте или в контейнере?
и то и другое нигде не вижу
1 ответ
Здесь происходит то, что ваш скрипт на python записывает файл pickle в его текущее местоположение (/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
Во всяком случае, это сработало для меня.