sftp じゃなくて NAS をマウントして操作

jpg ファイルを dicom に変換して dcm4chee にインポートするプロセスを、sftp じゃなくて NAS をマウントして操作します。

その方がよほど簡単です。

NAS を read-only でマウントする

NAS をマウントすると便利なのですが、もともとのファイルやディレクトリを破壊してしまわないか不安です。

そこで、read-only で NAS をマウントします。


sudo mount -t nfs -o ro 192.168.0.21:/volume1/MMR_PKG /mnt/nas/MMR_PKG

mmr.sql3 のコピー

これもとても簡単。


    def mmrDL( self ):
        shutil.copyfile("/mnt/nas/MMR_PKG/mmr.sql3", "/var/www/html/MMR_PKG/mmr.sql3") 

jpg ファイルのコピー


    def jpgDL(self):        
        files = os.listdir( self.mmrRemoteDir)
        for remote_file in files:
            if 'snap' in remote_file:
                copyfrom = self.mmrRemoteDir + '/' + remote_file
                localfile = '/var/www/html/MMR_PKG/jpgtmp/' + remote_file
                shutil.copyfile( copyfrom, localfile)

処理する範囲をテキストファイルから読み込む

これもデータベースからじゃなくて、テキストファイルを作ってそれを読み込ませる方が簡単です。

例えば、処理したい検査IDの最初と最後を以下のようなテキストファイルに記録します。


17540
36400

そして python で読み込みます。


def readfile(self):
    nums = []   
    with open('/var/www/html/MMR_PKG/log/studyID.txt', 'r', encoding='utf-8') as fin:
        for line in fin.readlines():
            try:
                num = int(line)
            except ValueError as e:
                print(e, file=sys.stderr)
                continue
            nums.append(num)
    return nums
                           
if __name__ == "__main__":
    ids = dcm.readfile()
    startID = ids[0]
    endID = ids[1]

このようにすると、startID には 17540、endID には 36400 がセットされます。

そうして while ループで回せばいいと思います。


    studyID = startID
    while studyID < endID:        
        print(studyID)
        dcm.setVal( studyID )
        if dcm.exist_remotedir() :
            dcm.delDir( '/var/www/html/MMR_PKG/jpgtmp' )
            dcm.setVal( studyID )
            dcm.jpgDL()
            dcm.set_imgArr()
            dcm.createDir()
            dcm.createDcm()  
        studyID += 1