簡體   English   中英

調試從 C# 調用的 python 腳本

[英]Debug a python script called from C#

我使用以下代碼從 C# 運行 python 腳本:

        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();
        }

問題:如何在 VisualStudio 2017 中調試 python 腳本“MyScript.py”? 由於特定於應用程序的參數,我無法直接運行和調試腳本,這些參數只能由 C#-Part 計算。

我的解決方案包含一個包含“MyScript.py”和調用 C# 代碼的 python 項目。 當我在“MyScript.py”中設置斷點並啟動 C# 應用程序時,斷點被禁用。 我還嘗試將調試器附加到由 Process.Start() 創建的進程,但同樣發生了:斷點被禁用。

@Infected 的評論使我想到了以下解決方案:傳遞給腳本的參數存儲在 python 項目文件的節點“CommandLineArguments”中。 所以在調試的時候,

  • 修改現有的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 和其他貢獻者!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM