我有以下代码从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 :(得分:2)
除了输出程序写入其(标准)输出通道外,程序总是以exit status(或退出代码)终止。如果程序正确运行,并且如果出现错误,则退出代码0
以外的退出代码,退出代码{1}}。
现在,当出现算术错误时,python程序通常会以0
以外的退出状态退出,例如程序:
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
。现在很明显,python程序员可以使用1
- try
处理,这样错误不会导致退出状态而不是零,但这至少会部分地阻止退出状态的使用。
如果catch
程序的程序员在错误正确时执行了退出代码,或者错误是算术错误,那么python
程序将以退出代码0以外的方式退出。 / p>
您可以使用Process.ExitCode
来抓取退出代码。
在文档手册中,我们可以阅读:
开发人员通常表示成功退出
python
值为零,并通过非零值指定错误,调用方法可以使用这些值来确定异常进程终止的原因。没有必要遵循这些准则,但它们是惯例。
例如:
ExitCode