如何弄清楚从 C# 运行的 python 脚本是否通过或失败
本文关键字:是否 脚本 失败 python 弄清楚 运行 | 更新日期: 2023-09-27 17:55:39
我有以下代码从C#调用Python应用程序,有没有办法弄清楚从C#运行的python脚本是通过还是失败?我们是否得到任何退出/返回代码,指示从 C# 运行的 python 应用程序成功或失败
using System;
using System.IO;
using System.Diagnostics;
namespace CallPython
{
class Program
{
static void Main(string[] args)
{
string python = @"C:''Python27'python.exe";
string myPythonApp = @"C:''Dropbox'scripts'loadbuild'sum.py";
int x = 2;
int y = 5;
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(python);
myProcessStartInfo.UseShellExecute = false;
myProcessStartInfo.RedirectStandardOutput = true;
myProcessStartInfo.Arguments = myPythonApp + " " + x + " " + y;
Process myProcess = new Process();
myProcess.StartInfo = myProcessStartInfo;
myProcess.Start();
StreamReader myStreamReader = myProcess.StandardOutput;
string myString = myStreamReader.ReadToEnd();
myProcess.WaitForExit();
myProcess.Close();
Console.WriteLine("Value received from script: " + myString);
Console.ReadLine();
}
}
}
除了输出程序写入其(标准)输出通道外,程序总是以退出状态(或退出代码)终止。如果程序运行正确,则应0
退出代码退出,如果出现错误,则应使用退出代码0
退出。
现在,当出现算术错误时,python程序通常会以0
以外的退出状态退出,例如程序:
a = 4/0
不仅会产生错误消息:
Traceback (most recent call last):
File "test.ply", line 1, in <module>
a = 4/0
ZeroDivisionError: integer division or modulo by zero
但也返回退出状态1
.现在显然,python程序员可以使用try
- catch
处理,以便错误不会导致除零以外的退出状态,但这至少部分会破坏退出状态的使用。
如果python
程序的程序员在错误正确时实现了退出代码,或者错误是算术错误,则python
程序将以非零的退出代码退出。
您可以使用 Process.ExitCode
捕获退出代码。
在文档手册中,我们可以阅读:
开发人员通常通过
ExitCode
值零来指示成功退出,并通过调用方法可用于识别异常进程终止原因的非零值来指定错误。没有必要遵循这些准则,但它们是惯例。
例如:
//...
myProcess.WaitForExit();
int ec = myProcess.ExitCode;
if(ec != 0) {
//oops the Python program made an error
} else {
//assume everything went fine
}