Start.Process不在单独的进程中运行Scipt

时间:2018-10-04 13:24:45

标签: c# python .net-core


我想从控制台应用程序运行长期运行的python脚本。
我用 (“ my_script.py”),当我关闭控制台时,python脚本也会终止。
在任务管理器中,所有(控制台应用程序和脚本)都在.Net Core Host下运行。
如何将python作为完全分离的进程运行?

1 个答案:

答案 0 :(得分:2)

通常,这将完全在控制台应用程序外部启动python脚本:

System.Diagnostics.Process.Start(@"C:\path\to\my_script.py");

在经典.NET中,它将通过新的Shell调用该过程,但是在.NET Core中,该过程是在现有可执行文件中直接创建的。有一个选项可以更改,称为UseShellExecuteThis 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脚本仍在后台运行。