【问题标题】:How to call from C# a python script with many functions?如何从 C# 调用具有许多功能的 python 脚本?
【发布时间】:2019-04-09 20:16:46
【问题描述】:

我尝试从 C# 调用一个 Python 脚本,该脚本分为许多功能。有了这部分代码输出为空。

import sys
def main():
    print('Hello')
    if len(sys.argv) >=3:
        x = sys.argv[1]
        y = sys.argv[2]
        # print concatenated parameters
        main2(x,y)
def main2(x,y):
    print(x+y)
if __name__=='__main__':
    main()

C#:

int x = 1;
int y = 2;
string progToRun = "main.py";
Process proc = new Process();
proc.StartInfo.FileName = @"C:\Program Files\Python37\python.exe";
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.Arguments = string.Concat(progToRun, " ", x.ToString(), " ", y.ToString());
proc.Start();
StreamReader sReader = proc.StandardOutput;
string output = sReader.ReadToEnd();
proc.WaitForExit();
Console.ReadLine();

使用这个 python 脚本它可以工作:

import sys

def main():
    print('Hello')
    if len(sys.argv) >=3:
        x = sys.argv[1]
        y = sys.argv[2]
        # print concatenated parameters
        print(x+y)


if __name__=='__main__':
    main()

这两个 pyhton 脚本有什么区别?如何在 C# 中使用具有许多功能的 python 脚本?我可以在不发送参数(x 和 y)的情况下执行 python 脚本吗?

谢谢。

【问题讨论】:

  • 如果你只是为了简单化的东西,使用iron python

标签: c# python process


【解决方案1】:

基本上,在您的第一个 Python 代码块中,您会收到错误 local variable 'x' referenced before assignment 您对 main2(x,y) 的调用的缩进是 1 级。

您需要为 main2(x,y) 之类添加缩进级别

【讨论】:

  • 对不起。我修改了python代码块,但这并没有改变任何东西。
  • 那么除了“这两个 pyhton 脚本有什么区别?”您的问题/问题到底是什么?
  • 嗨!问题是我必须执行一个带有许多相互调用的函数的python脚本(就像在第一个python代码块中一样)并且字符串输出没有值,是空的,对于第二个python代码块,这个字符串有值,我没有'不明白出了什么问题。
  • 正如@Patrick Artner 建议的那样,您可能想研究 Iron Python 以获取 Python + .Net 相关内容。看看这个之前提出的问题:stackoverflow.com/questions/7053172/…
  • 另外,再次仔细检查,在这两种情况下,我都得到“Hello\r\n12\r\n”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2017-11-02
  • 2014-06-25
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多