Отладка скрипта python, вызванного из C# - PullRequest
1 голос
/ 13 марта 2020

Я запускаю python сценарии из C# со следующим кодом:

        ProcessStartInfo startInfo = new ProcessStartInfo();
        startInfo.FileName = Path.Combine("myPath", "python.exe");
        startInfo.Arguments = "-u ";
        startInfo.Arguments += "MyScript.py" + applicationSpecificArguments;
        using (Process process = Process.Start(startInfo))
        {
            process.WaitForExit();
        }

Вопрос: Как отладить сценарий python "MyScript.py" в VisualStudio 2017? Я не могу напрямую запустить и отладить сценарий из-за аргументов c приложения, которые могут быть вычислены только с помощью C# -Part.

Мое решение содержит проект python, содержащий «MyScript.py» и вызывающий C# код. Когда я устанавливаю точку останова в «MyScript.py» и запускаю приложение C#, точка останова отключается. Я также попытался подключить отладчик к процессу, который создается Process.Start (), но произошло то же самое: точка останова была отключена.

1 Ответ

0 голосов
/ 16 марта 2020

Комментарий @Infected привел меня к следующему решению: аргументы, передаваемые в сценарий, хранятся в узле «CommandLineArguments» файла проекта python. Таким образом, при отладке

  • измените существующий python файл проекта
  • , запустите новый экземпляр Visual Studio вместо python .exe

В новом окне Visual Studio я могу начать отладку как обычно.

Код выглядит следующим образом:

            ProcessStartInfo startInfo = new ProcessStartInfo();
            if (System.Diagnostics.Debugger.IsAttached)
            {
                startInfo.FileName = @"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\devenv.exe";
                string pyProjectFile = @"D:\myPythonProject.pyproj";
                string pyProjectFileTemp =  @"D:\myPythonProjectTemp.pyproj";
                XmlDocument doc = new XmlDocument();
                doc.Load(pyProjectFile);
                XmlNodeList myNodes = doc.GetElementsByTagName("CommandLineArguments");
                myNodes[0].FirstChild.Value = applicationSpecificArguments;
                doc.Save(pyProjectFileTemp);
                //Pass the modified project file as argument to Visual Studio
                startInfo.Arguments += pyProjectFileTemp;
            }


Благодаря @Infected и другим участникам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...