65.9K
CodeProject 正在变化。 阅读更多。
Home

Python、Visual Studio 和 C#……如此。美妙。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.97/5 (20投票s)

2013年9月23日

CPOL

9分钟阅读

viewsIcon

161314

downloadIcon

6

Python、Visual Studio 和 C#

Python 和 C# – 背景

让我们澄清一下。将 PythonC# 结合使用并不是什么新鲜事。如果你使用过其中一种语言,并且至少听说过另一种,那么你可能听说过 IronPython。IronPython 允许你同时使用 C# 和 Python。相当靠谱。如果你还没有尝试过,希望你的大脑已经开始嗡嗡作响,思考其中的可能性。

我的开发经验主要在 C#,在此之前是 VB .NET(所以我对整个 .NET 框架非常依恋……我们现在基本上是最好的朋友)。然而,在我的职业生涯早期(实际上是我在 Engenuity Corporation 的第一次合作),我接触到了 Python。我从来没有真正使用过 动态或隐式类型语言,所以那是一次相当的冒险和学习经历。

不幸的是,除了我在 EngCorp 的时间,我再也没有机会继续 Python 开发了。最近,我萌生了好奇心。我对 C# 很熟悉,当然,但这足够吗?市面上有那么多很棒的编程语言!但我很难走出舒适区。我习惯了 C# 和 Visual Studio 的强大功能,那么我怎么才能摆脱这两样东西呢?

嗯……我暂时不必。

适用于 Visual Studio 的 Python 工具

这是一个偶然发现的惊喜

但我真的不知道这一切是关于什么的。我听说过 IronPython,我知道我可以将 Python 与 C# 一起使用,那么“Python 工具”到底是什么?

我观看了 Visual Studio 团队发布的视频后,被迷住了。这是否意味着我可以重新学习 Python,而无需离开我最喜欢的 IDE 的舒适区?没错。看完这个视频后(是的,我不知怎么地控制住了兴奋,等到视频结束),我做的第一件事就是启动 Visual Studio。我使用的是 Visual Studio 2012(也是深色主题),所以我的截图中你将看到它。Visual Studio 加载后

  • 转到 IDE 顶部的“工具”菜单。
  • 选择“扩展和更新…”菜单项。
  • 现在你应该会看到“扩展和更新”对话框窗口。

在对话框左侧选择“在线”选项后,你需要搜索“Python 工具”。它应该看起来像这样

安装适用于 Visual Studio 的 Python 工具非常简单。确保你正在在线搜索并搜索“Python 工具”。

按照所有安装说明操作后,是时候确保安装成功了。很简单!

  • 转到 IDE 顶部的“文件”菜单。
  • 转到“新建”菜单项。
  • 选择“项目…”菜单项。
  • 现在你应该会看到“新建项目”对话框

为确保 Python 现在可用,请尝试查看你是否有可用的 Python 项目模板

要验证 Python 现在在 Visual Studio 中可用,请查看已安装的模板。它应该在“其他语言”下。

希望它在那里。如果不是,或者如果你有任何其他安装问题,我强烈建议你参考官方网站并按照那里的说明操作。这就是让我当前机器启动并运行的原因,但如果你的设置略有不同,你绝对应该遵循他们的说明。就是这样!你有了 Python 工具!但是,还有什么能让你的 C#、Python 和 Visual Studio 体验**更棒**呢?这个问题的答案当然是IronPython。前往此页面并安装最新版本的 IronPython。一旦设置好,你就应该拥有所有需要的花哨工具了!

打印到控制台 – 你的第一个 C#/Python 应用程序

我确信你感到兴奋。我首先要说的是,代码都可以在线获取,所以即使我这里有代码片段和图片,你也可以下载所有源代码并按照这种方式进行操作。否则,我将尽力引导你了解我是如何设置的!这个应用程序将非常简单。它比“Hello World”应用程序稍大一点,不同之处在于你告诉 Python 你想要打印到控制台的内容。很简单,对吧?

首先,让我们创建一个新的 C# 控制台项目。

  • 在 Visual Studio 中,转到 IDE 顶部的“文件”菜单。
  • 选择“新建”菜单项。
  • 选择“项目”菜单项。
  • 你应该会看到“新建项目”对话框。
  • 在对话框左侧选择“Visual C#”模板。
  • 选择“控制台应用程序”。
  • 在对话框顶部的框架下拉列表中,选择 .NET 4.5
  • 填写你想要保存项目的详细信息。
  • 按下“确定”!我们开始了!

现在你有一个控制台应用程序,你需要添加所有我们需要的依赖项。如果你在解决方案资源管理器中查看项目,你将需要添加以下依赖项

IronPython Dependencies in Visual Studio

通过 Visual Studio 中的解决方案资源管理器添加 IronPython 和 Microsoft.Scripting 依赖项。

如果你在设置依赖项时遇到问题,请记住你可以随时下载我整理的源项目。现在你已经拥有所有必要的依赖项,这是我们小应用程序的源代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;

using IronPython.Hosting;

namespace PrintToConsole
{
    internal class Program
    {
        private static void Main()
        {
            Console.WriteLine("What would you like to print from python?");
            var input = Console.ReadLine();

            var py = Python.CreateEngine();
            try
            {
                py.Execute("print('From Python: " + input + "')");
            }
            catch (Exception ex)
            {
                Console.WriteLine(
                   "Oops! We couldn't print your message because of an exception: " + ex.Message);
            }

            Console.WriteLine("Press enter to exit...");
            Console.ReadLine();
        }
    }
}

让我们看看这段代码在做什么

  • 首先,我们从用户那里获取输入。这是一些非常基本的 C# 内容,但我们只是简单地向控制台打印一条消息,并在用户按下 Enter 之前获取他们输入的文本。
  • 接下来,我们创建一个 Python 引擎实例。这个类将负责为我们执行 Python!
  • 存在于 try 块中的代码告诉我们的引擎实例执行一些 Python 代码。
    • 你看到传递给引擎的 print() 方法Python 3.0 之后的语法
    • 我们传递给 print() 方法的参数是一个 Python 字符串……但我们也把用户输入放了进去!
    • 同样重要的是要注意,我们正在构建一个包含所有将被执行的 Python 代码的 C# 字符串,并将**这个**传递给引擎。
  • 我这里有一个 catch 块来捕获任何意外问题。你能想到什么吗?
    • 如果你的用户输入了一些带有单引号的文本会发生什么?
  • 应用程序的最后一部分只是在用户完成所有操作后,要求他们按 Enter 键。

简单!这是你的第一个 C# + Python 应用程序!你可以在这里查看整个源代码。

运行外部脚本

这很棒:你现在可以从 C# 中运行一些 Python 代码。非常酷。但是你已经编写的所有那些 Python 脚本呢?你需要开始将它们复制粘贴到 C# 代码文件中并尝试 nicely 格式化它们吗?答案是否定的,谢天谢地!让我们从遵循第一个示例中概述的完全相同的步骤开始。你应该能够设置一个新的 .NET 4.5 C# 控制台项目并添加所有相同的依赖项。一旦你将它们组合在一起,你就可以使用以下源代码

using System;
using System.Collections.Generic;
using System.Text;

using IronPython.Hosting;

namespace RunExternalScript
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Press enter to execute the python script!");
            Console.ReadLine();

            var py = Python.CreateEngine();
            try
            {
                py.ExecuteFile("script.py");
            }
            catch (Exception ex)
            {
                Console.WriteLine(
                   "Oops! We couldn't execute the script because of an exception: " + ex.Message);
            }

            Console.WriteLine("Press enter to exit...");
            Console.ReadLine();
        }
    }
}

这个脚本看起来很相似,对吗?在我解释它的作用之前,让我们添加你将从这个控制台应用程序中执行的 Python 脚本。

  • 在解决方案资源管理器中右键单击你的项目。
  • 从上下文菜单中选择“添加”菜单项。
  • 选择“新建项…”菜单项。
  • 你应该会看到“添加新项”对话框。
  • 你将需要添加一个名为“script.py”的新文本文件。

它应该看起来像这样

在“添加新项”对话框中,选择“文本文件”并将其重命名为“script.py”。

下一个非常重要的步骤是确保此脚本被复制到输出目录。为此,在解决方案资源管理器中选择你新添加的脚本文件,并将“复制到输出目录”设置更改为“始终复制”。现在,当你构建项目时,你应该会看到你的 *script.py* 文件被复制到构建目录。太棒了!你可以在脚本文件中放置任何你想要的 Python 代码,但我从一些简单的代码开始

print('Look at this python code go!')

好了,现在回到 C# 代码。这个示例看起来很像第一个示例。

  • 在执行 Python 脚本之前等待用户按下 Enter。只是为了确保他们准备好了!
  • 创建我们的引擎实例,就像第一个示例中一样。
  • try 块中,我们告诉引擎执行我们的脚本文件。因为我们已将文件复制到输出目录,所以我们可以在此处使用文件的相对路径。
  • 同样,我们已将整个内容包装在 try/catch 中,以确保捕获你在 Python 脚本中出现的任何错误。
    • 尝试在脚本文件中放置一些错误的 Python 代码并运行。会发生什么?
  • 最后,确保用户对输出满意,并在他们按下 Enter 后再退出。

看这多简单!现在你可以选择执行 C# 中生成的 Python 代码**或**执行外部 Python 脚本!

摘要

很高兴看到你表示有兴趣尝试将这两种语言在一个强大的 IDE 中结合起来。我们在这里只是触及表面,坦白说,我仍然是 Python 和 C# 集成的新手。我需要重新熟悉 Python,但我已经看到这种方式编写一些非常酷的应用程序的巨大潜力。

在不久的将来,我将讨论 C# 中的动态关键字实际上如何允许你在 Python 中创建类并在 C# 中直接使用它们……动态地!

这两个页面都对我和 C# 以及 Python 的协同工作非常有帮助

这些项目的源代码可在以下位置获取

文章 Python、Visual Studio 和 C#……如此。美妙。 最初发表在 Dev Leader 上。

© . All rights reserved.