Я пытаюсь автоматизировать приложение, используя 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 #. Приложение содержит много кода и довольно сложно, но я постараюсь изо всех сил.
Спасибо!