使用C#

时间:2018-12-01 14:28:46

标签: c# python .net

让我们说我有这个超级Python脚本,将来需要运行cv2 ...

import cv2

def method():
    print("Hello")
    parameter = "l"
    return "OOPS"

method()

在C#中类似这样的东西。

Process p = new Process();
    p.StartInfo = new ProcessStartInfo(@"D:\Programming\Python\python.exe", fileName)
    {
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };
    p.Start();
    string output = p.StandardOutput.ReadToEnd();

但这确实会引发错误“ ImportError:DLL加载失败”。好吧,因为我有大约4个Python解释器,所以似乎在错误的目录中查找。进行快速修复。

string path = @"D:\Programming\Python;" + Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine);
            Environment.SetEnvironmentVariable("PATH", path, EnvironmentVariableTarget.Process);
            Environment.SetEnvironmentVariable("PYTHONHOME", @"D:\Programming\Python;", EnvironmentVariableTarget.Process);
            Environment.SetEnvironmentVariable("PYTHONPATH ", @"D:\Programming\Python\Lib; D:\Programming\Python\DLLs", EnvironmentVariableTarget.Process);
            string fileName = @"..\Python\hello.py";

            Process p = new Process();
            p.StartInfo = new ProcessStartInfo(@"D:\Programming\Python\python.exe", fileName)
            {
                RedirectStandardOutput = true,
                UseShellExecute = false,
                CreateNoWindow = true
            };
            p.Start();
            string output = p.StandardOutput.ReadToEnd();

现在已修复了导入DLL,但是出现了另一个野生错误,名为
致命的Python错误:initfsencoding:无法加载文件系统编解码器
ModuleNotFoundError:没有名为“ encodings”的模块

这时我迷路了,不知道下一步该怎么做...欢迎任何想法,祝你有美好的一天。

更新: 删除了anaconda和一个虚拟env之外的所有其他python解释器,并尝试以下操作:

  1. 使用给定的解释器从Visual Studio Code运行Python脚本,效果很好。
  2. 同样在Anaconda提示符下运行它。
  3. 手动添加到系统环境变量中
    PATH = D:\ Programming \ Python
    PYTHONHOME = D:\ Programming \ Python PYTHONPATH = D:\ Programming \ Python \ Lib; D:\ Programming \ Python \ DLLs; D:\ Programming \ Python \ Lib \ site-packages

因此,现在我可以成功地从cmd调用“ python”,并检查版本,虚拟环境是python 3.6,这是正确的选择。 Python is correct
但这就是所有乐趣的开始,您会期望控制台中出现“ hello”…… hell incarnate

1 个答案:

答案 0 :(得分:0)

未找到此问题的正确答案,但在p2exe或pyinstaller中发现了解决方法。
只需调用pyinstaller.py --onefile xx.py并创建exe文件并将其传递到进程即可。