Найти - Пользователи
Полная версия: Переменная в кортеже
Начало » Python для экспертов » Переменная в кортеже
1
zfoxx
Добрый день, подскажите как передать значение локальной переменной в кортеж?
Имею код:
 import os
from pydicom.filewriter import write_file_meta_info
from pynetdicom import (AE, debug_logger, evt, AllStoragePresentationContexts, ALL_TRANSFER_SYNTAXES)
debug_logger()
def handle_store(event, storage_dir):
    """Handle EVT_C_STORE events."""
    global Nam
    ds = event.dataset
    PatientName = str(ds.PatientName)
    PatientName = PatientName.replace(".","")
    PatientName = PatientName.replace(" ","_")
    PatientName = PatientName.replace("/","_")
    PatientName = PatientName.replace("*","+")
    PatientName = PatientName.replace(".","")
    PatientID = ds.PatientID
    PatientID = PatientID.replace("/","_")
    Nam = PatientName + "_" + PatientID    
    try:
        os.makedirs(storage_dir, exist_ok=True)
    except:
        # Unable to create output dir, return failure status
        return 0xC001
    # We rely on the UID from the C-STORE request instead of decoding
    fname = os.path.join(storage_dir, event.request.AffectedSOPInstanceUID)
    with open(fname, 'wb') as f:
        # Write the preamble, prefix and file meta information elements
        f.write(b'\x00' * 128)
        f.write(b'DICM')
        write_file_meta_info(f, event.file_meta)
        # Write the raw encoded dataset
        f.write(event.request.DataSet.getvalue())
    return 0x0000
handlers = [(evt.EVT_C_STORE, handle_store, ["OUT"])]
ae = AE(ae_title=b"MY_AE_TITLE")
ae.maximum_pdu_size = 0
storage_sop_classes = [cx.abstract_syntax for cx in AllStoragePresentationContexts]
for uid in storage_sop_classes:
    ae.add_supported_context(uid, ALL_TRANSFER_SYNTAXES)
ae.start_server(('192.168.1.1', 104), evt_handlers=handlers)

Данный скрипт собирает картинки с PACS сервера , верней то что пишлет PACS сервер на устройство с конкретным AT title.
Конкретно в данном случае создается папка OUT и в нее попадают картинки с PACS сервера.
Я хочу сделать так что бы картинки попадали в отдельные папки с конкретными названиями, это реализуется вот тут:
     PatientName = str(ds.PatientName)
    PatientName = PatientName.replace(".","")
    PatientName = PatientName.replace(" ","_")
    PatientName = PatientName.replace("/","_")
    PatientName = PatientName.replace("*","+")
    PatientName = PatientName.replace(".","")
    PatientID = ds.PatientID
    PatientID = PatientID.replace("/","_")
    Nam = PatientName + "_" + PatientID
т.е. переменная Nam принимает нужное значение.

Как подставить переменную Nam вместо OUT ?

Если заменить
 handlers = [(evt.EVT_C_STORE, handle_store,  ["OUT"])]
на
 handlers = [(evt.EVT_C_STORE, handle_store (Nam))]
то я получаю ошибку
NameError: name ‘Nam’ is not defined
Даже если
  handlers = [(evt.EVT_C_STORE, handle_store, ["OUT"])] 
оставить как есть и ниже написать Print (Nam) то я получаю точно такую же ошибку, хотя Nam объявлена как глобальная переменная
global Nam
PEHDOM
zfoxx см подпись.
zfoxx
PEHDOM
zfoxx см подпись.
Большое спасибо за подсказку, поправил.
:-)
PEHDOM
zfoxx
хотя Nam объявлена как глобальная переменна global Nam
Она то обьявлена, но только внутри вашей функции, это собвтенно указание для интрпретатора что переменную нужно искать в globals а не в locals.
Теперь вам нужно ее или обьявить в globals, хотябы так
 Nam=''
или вызвать handle_store чтобы он ее создал в globals.
потому что на момент :
  handlers = [(evt.EVT_C_STORE, handle_store (Nam))]
переменной Nam не существует, ведь handle_store ни разу не вызывался а больше нигде переменная не обьявлена.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB