dockerize python-скрипт с помощью sys.path - PullRequest
0 голосов
/ 19 сентября 2018

Здравствуйте, я пытаюсь запустить Docker образа, который я создал из Dockerfile:

FROM python:3

ADD feature.py /

RUN pip install pandas
RUN pip install numpy

CMD ["python", "/feature.py"]

Вот скрипт Python:

import os # I am not sure we are going to do import right here???
import pandas as pd
import numpy as np
import sys


def freesurfer_statistics(address):


df_asseg = []

data = pd.read_csv(address+'/'+'/stats/aseg.stats', sep = '#').loc[79:] 
['Unnamed: 0']

patient = pd.DataFrame()
for i in range(79,124):
    patient = patient.append(data[i].split())

data = pd.DataFrame(np.array(patient).reshape(45,10))
data.columns = ['Index','SegId','NVoxels','Volume_mm3',\

'StructName','normMean','normStdDev','normMin','normMax','normRange']

df_asseg.append(list(data.NVoxels)+list(data.Volume_mm3)+ list(data.normMean)+list(data.normStdDev)+list(data.normMin)+list(data.normMax)+list(data.normRange))


df_asseg = pd.DataFrame(np.array(df_asseg).reshape(1,315))

df_rh = pd.DataFrame(np.array(df_rh).reshape(1,306))

df_rh.columns = names
csv_file=pd.concat([df_asseg, df_rh, df_lh], axis = 1)


csv_file.to_csv(address+'/morphometry.csv')

freesurfer_statistics(sys.argv[1])

Он находит файл и записывает данныеto morphometry.csv

После сборки Docker я запускаю контейнер:

docker run --rm -v /mnt/data/service/fmriprep/run_forrest/freesurfer/sub-01:/data features:latest

У меня есть ошибка:

Traceback (most recent call last):
File "/feature.py", line 95, in <module>
freesurfer_statistics(sys.argv[1])
IndexError: list index out of range

Я думаю, что я делаю ошибку в Dockerfile, яновичок в этом.Но не могу получить информацию.

1 Ответ

0 голосов
/ 19 сентября 2018

Вашему freesurfer_statistics(sys.argv[1]) нужен аргумент командной строки, который вы не предоставляете при вызове скрипта python с использованием CMD в вашем Dockerfile.Итак, ваша строка CMD в Dockerfile должна быть изменена следующим образом.

CMD ["python", "/feature.py", "argument-for-freeuser_statitics"]

Для пояснения, sys.arg[0] - это имя самого скрипта, а sys.arg[1] - первый аргумент, который вы предоставляете при вызове.скрипт в командной строке.

Редактировать на основе комментариев. То, что вы сделали с docker run, было просто сопоставить каталог с контейнерами докера.Поскольку вы сопоставили каталог своего хоста с /data, это должно быть «аргументом для freeuser_statistics».

CMD ["python", "/feature.py", "/data"]
...