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