Python завершается рано, используя Python для .NET - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь автоматизировать приложение, используя Python. Хотя я знаю, как работает графический интерфейс приложения на поверхности, он написан на C #, и я в основном не смог следовать исходному коду (хотя я свободно знаю Python, я не очень знаком с C #). Я также не знаю, кто создал приложение - это было бы моим основным источником помощи, если это возможно.

Мои первоначальные попытки использовать приложение для автоматизации были связаны с использованием Python для .NET (http://pythonnet.github.io/),, что позволяет мне импортировать код C # в Python и получать доступ к классам и их методам. До сих пор это было успешно, и я удалось вызвать приложение и запустить его. Однако после завершения процесса Python завершается, и после вызова кода C # код Python не выполняется.

По сути, приложение C # берет пути к двум входным файлам, выполняет некоторые операции между ними и в результате выводит один файл. Вот мой скрипт на python:

import sys, clr

# add location of .dll to path
sys.path.append(r'path\to\dll\net472')

# name of the dll
clr.AddReference("MatchingDLL")

# from the DLL, import the MainProgram (which contains a Main() method which appears to 'run' everything)
from MatchingDLL import MainProgram

def worker():
    # create an instance of MainProgram, then set attributes which would normally be input in the GUI
    mp = MainProgram()
    mp.main_input_source = 'test_source.txt'
    mp.main_input_lookup = 'test_lookup.txt'
    mp.output_folder = r'\output\dir'
    mp.output_name = 'test_output.txt'
    # call the Main() method to run the application
    mp.Main()

if __name__ == '__main__':
    print('start')
    worker()
    # worker() successfully runs and produces a proper output file, but Python terminates before the print statement below is reached
    print('end')

Приложение вызывается и успешно выполняется, создавая правильный выходной файл, который великолепен Тем не менее, Python завершает работу после завершения метода Main () из C #.

Вот код C # для MainProgram:

public class MainProgram
    {
        public string main_input_source;
        public string main_input_lookup;
        public string output_folder;
        public string output_name;
        [STAThread]
        public void Main()
        {
            Application.EnableVisualStyles();
            /*Application.SetCompatibleTextRenderingDefault(true);*/
            EntryForm EntryForm1 = new EntryForm(file1: main_input_source, file2: main_input_lookup, path: output_folder, file3: output_name);
            Application.Run(EntryForm1); // run program

            Environment.Exit(0); // exit program after it's run
        }
    }

У меня есть доступ к другим файлам .cs, где хранятся другие классы (т.е. EntryForm). Кроме того, я вижу строку, содержащую Environment.Exit(0) - я пытался удалить эту строку и перекомпилировать, но сценарий Python по-прежнему завершался рано, в остальном все то же самое.

В общем, учитывая, что я очень незнаком с C #, я просто не знаю, с чего начать. Решение может быть простым или более сложным, я не уверен. Надеясь, что кто-то сможет дать какое-то понимание, большое или маленькое.

При необходимости я могу попытаться предоставить больше кода C #. Приложение содержит много кода и довольно сложно, но я постараюсь изо всех сил.

Спасибо!

...