[英]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”中。 所以在調試的時候,
在新的 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.