import python программа, которая содержит «if __name__ == '__main__':» в python - PullRequest
0 голосов
/ 04 августа 2020

У меня есть два python скрипта, один из которых c должен записать json (file1.py), а другой (file2.py) - импортировать file1.

My python сценарий file1.py успешно выполнен, но когда я пытаюсь импортировать в file2.py, он не работает, так как он содержит if __name__ == '__main__':

file1.py

def demo(opt,streamPixel):
    #some functions

if __name__ == '__main__':
    streamPixel = "{\"type\":\"FeatureCollection\",\"features\":["
    #parser = argparse.ArgumentParser()
    Transformation= 'TPS'
    FeatureExtraction = 'ResNet'
    SequenceModeling = 'BiLSTM'
    Prediction = 'Attn'
    num_fiducial = 20
    input_channel = 1
    output_channel = 512
    imgH = 72
    imgW =320
    hidden_size = 256
    rgb = False
    batch_max_length = 25
    character = '01'
    sensitive =True
    #PAD = True
    image_folder ='D:/work/source_code/VIC_OCR/cropped'
    workers = 4
    batch_size= 192
    num_class = 4
    saved_model = 'D:\\SARIGHA\\source_code\\saved_models\\TPS-ResNet-BiLSTM-Attn-Seed323\\best_accuracy.pth'

    opt = None

    """ vocab / character number configuration """
    if sensitive:
        character = string.printable[:-6]  # same with ASTER setting (use 94 char).

    cudnn.benchmark = True
    cudnn.deterministic = True
    num_gpu = torch.cuda.device_count()

    demo(opt,streamPixel)

file2.py:

import file1
from file1 import demo

, если я запускаю свой file2.py, он просто производит вот так

(victoria) D:\work\source_code\textReg\imageOrientation>python file2.py

(victoria) D:\work\source_code\textReg\imageOrientation>

есть ли возможность импортировать file1.py в file2.py

Ответы [ 3 ]

1 голос
/ 04 августа 2020

Вместо этого вы можете создать класс, поместить его в file1.py и импортировать его следующим образом

from file1.py import pixelModel

pixelModel = pixelModel()
class pixelModel():
# all your variables you have mentioned in main

def __init__(sensitive):
    self.sensitive = sensitive
    if sensitive:
        character = string.printable[:-6]
    cudnn.benchmark = True
    cudnn.deterministic = True
    self.num_gpu = torch.cuda.device_count()

    demo(opt,streamPixel)


0 голосов
/ 04 августа 2020

Когда вы пишете что-то под if __name__ == '__main__', они запускаются, когда наш скрипт запускается из командной строки. Если вы импортируете свой сценарий в другой сценарий python, эта часть не будет выполнена (см. это подробное объяснение , чтобы понять, почему).

Один из способов импорта код в другом скрипте должен был бы поместить его в такую ​​функцию:

file1.py:


def myfunction():
    # Do what you want here
    print('This is my function in file1')

if __name__ == '__main__':
    myfunction()

file2.py:

from file1 import myfunction

if __name__ == '__main__':
    myfunction()
0 голосов
/ 04 августа 2020

Что значит «не работает»? Что именно происходит? Если file2.py - это просто так, конечно, он не будет работать, потому что вы ничего не запускаете. if __name__ == '__main__': означает, что этот материал будет запускаться только в том случае, если он запускается напрямую, а не импортируется.

...