我想从控制台应用程序运行长期运行的python脚本。
我用
(“ my_script.py”),当我关闭控制台时,python脚本也会终止。
在任务管理器中,所有(控制台应用程序和脚本)都在.Net Core Host下运行。
如何将python作为完全分离的进程运行?
答案 0 :(得分:2)
通常,这将完全在控制台应用程序外部启动python脚本:
System.Diagnostics.Process.Start(@"C:\path\to\my_script.py");
在经典.NET中,它将通过新的Shell调用该过程,但是在.NET Core中,该过程是在现有可执行文件中直接创建的。有一个选项可以更改,称为UseShellExecute
。 This is directly from the Microsoft documentation:
true
(如果在启动过程时应使用外壳程序);false
(如果应直接从可执行文件创建进程)。在.NET Framework应用程序中,默认值为true
;在.NET Core应用程序中,默认值为false
。
这是使用方法:
var myPythonScript = new Process();
myPythonScript.StartInfo.FileName = @"C:\path\to\my_script.py";
myPythonScript.StartInfo.UseShellExecute = true;
myPythonScript.Start();
当C#控制台应用程序终止时,您的python脚本应该仍在运行。
感谢Panagiotis Kanavos,他使我意识到UseShellExecute
与流程之间的父/子关系无关。因此,我使用.NET Core在本地设置了一个沙箱,并对其进行了一些测试,这对我来说是有效的:
var myPythonScript = new Process();
myPythonScript.StartInfo.FileName = @"C:\path\to\python.exe"; // the actual python installation executable on the server
myPythonScript.StartInfo.Arguments = @"""C:\path\to\my_script.py""";
myPythonScript.StartInfo.CreateNoWindow = true;
myPythonScript.Start();
父应用终止时,我的python脚本仍在后台运行。