我已经用Python编写了一个大型ish程序,我需要与一个较小的C#脚本进行对话。(我意识到让Python和C#互相对话并不是一种理想的状态,但我不得不这样做,因为这需要一个C#脚本。)我特别想要实现的是,这个问题背后的动机是,我想知道在C#脚本中何时发生特定的捕获异常
我一直试图通过让Python程序查看C#script的返回代码来实现上述目标。我一直遇到的问题是,如果我告诉C#给出一个返回码x,我的操作系统将收到一个返回码y,Python将收到一个返回码z。虽然一个给定的x似乎总是对应于一个特定的y和一个特定的z,但我很难理解这三者之间的关系;它们应该是一样的
以下是我的设置的详细信息:
下面是我所说的这类事情的一个最简单的工作示例:
这是一个小小的C#脚本:
namespace ConsoleApplication1
{
class Script
{
const int ramanujansNumber = 1729;
bool Run()
{
return false;
}
static int Main(string[] args)
{
Script program = new Script();
if(program.Run()) return 0;
else return ramanujansNumber;
}
}
}
如果我使用mcs Script.cs
编译它,使用mono Script.exe
运行它,然后运行echo $?
,它将打印193。另一方面,如果我运行此Python脚本:
import os
result = os.system("mono Script.exe")
print(result)
它打印49408。这三个数字之间的关系是什么:172919349408?如果我知道C#脚本将返回什么,我可以预测Python将接收到的返回代码吗
注意:我尝试在C#脚本中使用Environment.Exit(code)
,而不是让Main
返回整数。我遇到了完全相同的问题
使用
os.system
the documentation明确表示结果的格式与os.wait
的格式相同,即:因此,在您的情况下,它看起来像:
您可能希望将该部分更改为使用
subprocess
,例如,在对this question的回答中UPD:对于
mono
返回代码,看起来只使用了它的较低字节(即,它应该在0到255之间)。至少:相关问题 更多 >
编程相关推荐