使用 sys.path 对 python 脚本进行 dockerize

dockerize python script with sys.path

你好,我正在尝试 运行 图像 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])

它找到文件并将数据写入morphometry.csv

在 docker 构建 i 运行ning 容器后:

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 中犯了一个错误,我是新手。但是无法获取信息。

您的 freesurfer_statistics(sys.argv[1]) 需要一个命令行参数,您在 Dockerfile 中使用 CMD 调用 python 脚本时没有提供该参数。因此,您在 Dockerfile 中的 CMD 行应修改如下。

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

澄清一下,sys.arg[0] 是脚本本身的名称,sys.arg[1] 是您在命令行调用脚本时提供的第一个参数。

根据评论编辑, 您对 docker run 所做的只是将目录映射到 docker 容器。由于您已将主机目录映射到 /data,因此应该是 "argument-for-the-freeuser_statistics"。

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