【问题标题】:How to show result of python script in a console when running from ST editor?从 ST 编辑器运行时如何在控制台中显示 python 脚本的结果?
【发布时间】:2013-09-04 15:28:35
【问题描述】:

我是 Sublime Text 的新手,所以到目前为止还不熟悉它的内部结构。据我所知,问题可能与this 有关。

我有一个 python 脚本

var = raw_input("Enter something: ")
print "You entered ", var

它要求输入,等待它,然后在 Windows 控制台提示符中打印出来。

如何在“构建”时制作 ST3 以在控制台窗口中显示结果?

【问题讨论】:

  • 如果你只是从控制台run它, sublime text 中可以吗?
  • @GamesBrainiac - 我正在“瞄准”Windows cmd(每当我写“控制台”时,我的意思是那个),因为我正在编写具有 ST 控制台确实无法处理的某些属性的程序.编码和颜色输出,更不用说图形之类的了。但是,在这些网站上通过声誉搜寻之后,我会将它奖励给任何可以让我更接近于拥有输出到 cmd 的正确构建和运行系统的人。
  • 听从我的建议,使用 PyCharm。我可以构建它,但这需要很长时间,而且它不是解决问题的永久解决方案,因为 ST3 仍处于测试阶段,因此 API 不断变化。
  • @GamesBrainiac - 您是说 ST 无法在 cmd 提示符下执行简单命令并显示其结果。那么人们如何构建和运行他们的程序呢?
  • 他们在当前目录中使用 CMD。 ST 可以,但它的配置很多,而且它在 windows 和 linux 上有所不同,并且制造商无法决定他们想要保留哪些格式。

标签: python windows-7 sublimetext sublimetext3 build-system


【解决方案1】:

这实际上非常简单,但需要大量挖掘才能将各个部分连接起来。我首先使用批处理文件想出了一种更迂回的方法,但经过更多思考后,我将它们整合到一个 Sublime 构建系统中。

简单的方法

以下工作正常:

{
    "cmd": ["start", "cmd", "/k", "c:/python27/python.exe", "-u", "$file"],
    "selector": "source.python",
    "shell": true,
    "working_dir": "$file_dir"
}

将其保存为Packages/User/Python_cmd.sublime-build,选择Tools -> Build System -> Python_cmd,然后使用CtrlB构建。

start 言行一致,开始一个独立于 Sublime Text 的新进程。 cmdcmd.exe,Windows 命令行解释器。 /k 标志在程序运行后保持窗口打开(在新的命令提示符下),允许您检查其输出、查看回溯、运行其他命令等。如果您不需要该功能,请更改它到/c(如下所示),当程序运行完毕后cmd窗口将关闭。

我已经在 XP 和 Win7、ST2 和 ST3 上对其进行了测试,它在所有这些设备上都运行良好,无需进行任何更改。


我最初的解决方案:

首先,创建run_python.bat 并将其存储在您的Packages/User 目录中(可通过Preferences -> Browse Packages... 菜单选项访问):

@echo off
c:\Python27\python.exe -u %1
pause

显然,将路径调整为python.exe,如果它对您不同的话。接下来,使用以下内容创建Packages/User/Python_cmd.sublime-build

{
    "cmd": ["start", "cmd", "/c", "run_python.bat", "$file"],
    "selector": "source.python",
    "shell": true,
    "working_dir": "$packages/User"
}

保存,选择Tools -> Build System -> Python_cmd,切换到上面的 Python 程序,点击 CtrlB,我的朋友,你可以开始了。如果您希望cmd.exe 窗口保持打开状态以在提示符下输入更多命令,请将/c 更改为/k。我没有用任何 GUI 测试过这个,但假设你现在可以从命令行启动它们,它们应该可以使用这个。

我已经在 XP 上测试过了,所以它应该也可以在 Win7 上运行。它也应该适用于 Sublime Text 2。

【讨论】:

  • 基本上你的easy way 和我的回答一样,@MattDMo 在我眼里看起来不太好。但我可以理解,您会认为我的答案只是建立在您的第一个版本之上,即使事实并非如此。
  • @DanielFigueroa 我看到我们的答案相似,但它们是独立得出的。我从网上收集了一些零碎的东西来生成第一个版本,并制定了我的答案。我对它并不完全满意,几个小时后又回来了,想出了“简单的方法”,并修改了我的答案。直到后来我才看到你在我后面回答,显然我们俩的想法是一样的。
  • 我更喜欢"cmd": ["start", "cmd", "/c", "python -u $file && pause || pause"]。这不需要在运行脚本后输入exit 或单击关闭按钮。
  • 除了一件事之外,简单的工作正常。当我有未保存的文件(未保存到文件,即未给出名称)时,它会出错。您知道如何避免这种情况吗?
  • @Idigas 据我所知,Sublime 不会构建未保存的文件 - 这是因为它需要将文件名传递给您正在使用的任何解释器/编译器。您可以在Tools 菜单中设置Save All on Build 选项,但这会保存所有打开的文件。
【解决方案2】:

这真的很简单,只需发出一个命令来启动一个新的cmd.exe

start cmd /K python main.py

here了解更多(古代)

/k 标志将其他命令“传递”到cmd.exe 并一直运行直到您自己退出 shell,这对于您想要查看跟踪信息时很有用。

/C 标志将其他命令“传递”到cmd.exe 并一直运行直到 python 程序完成。

所以在你的项目文件中你应该有这样的东西:

"build_systems": [
    {
        "name": "RunPY",
        "cmd": ["start", "cmd", "/K", "python", "main.py"],
        "shell": true,
        "working_dir": "<project_path>"
    },

]

虽然我们在 Sublime 中讨论 build_systems 的主题,但我想推荐插件 BuildSwitcher,它在 ST3 上运行良好,只是当你在你的项目文件。这也意味着您必须为 ST3 手动安装插件。

使用该插件,您只需敲几下键即可轻松定义和运行不同的构建。真正节省时间。

【讨论】:

  • Daniel,您似乎也很了解 ST 的构建系统(不知道谁是第一个答案)。您能否看看我在上面答案中的最后一条评论,并告诉您是否有什么可以做的吗?
  • @Idigas 当然,只需将“save_on_focus_lost”设置为 true。那应该解决它。您可以在这里查看更多有趣的设置:docs.sublimetext.info/en/latest/reference/settings.html
【解决方案3】:

SublimeREPL for 是 SublimeText 的插件

它不会打开 cmd 实例,但可以为您提供一个 REPL,您可以在其中提供输入,而您通常无法在默认控制台上提供。

安装

Install Package Control. http://wbond.net/sublime_packages/package_control
Install SublimeREPL
    Preferences | Package Control | Package Control: Install Package
    Choose SublimeREPL
Restart SublimeText2
Configure SublimeREPL (default settings in Preferences | Package Settings |
SublimeREPL | Settings - Default should be modified in Preferences |
Package Settings |SublimeREPL | Settings - User,
this way they will survive package upgrades!

文档注释

ctrl+, , f 表示:按Ctrl和逗号,全部松开,按F。

上面的键绑定用于REPL中的Evaluate

如果SublimeText提示Cannot find REPL for "Language",你需要打开一个REPL by

Tools | SublimeREPL | Language

希望对你有帮助

【讨论】:

  • 虽然 S.REPL 确实是一个很棒的插件,但在这种情况下它根本不适合我。我试图用 ST 的构建系统解决这个问题,部分原因是我试图让它们也适用于我的其他两种语言……fortran(使用 ifort)和某种特殊的 Basic。我只是使用 python 作为示例语言,因为大多数人都熟悉它。
【解决方案4】:

这是 OSX 的一个变体,以防万一它对任何人有用:

转到工具->构建系统->新建构建系统...

{
    "cmd": ["/opt/X11/bin/xterm", "-e", "python -u \"$file\""],
    "selector": "source.python"
}

您可以找到有关here语法的更多详细信息

保存它(例如在 SublimeText 给你的目录中使用名称mytestbuild.sublime-build),切换到你的 Python 文件,从 Tools->Build Systems->mytestbuild 中选择构建系统,然后点击 cmd kbd>B.

这将打开一个 xterm,并在 xterm 窗口中运行您的 Python 代码。如果你想使用 Terminal.app,你可能需要使用来自this question 的技巧之一。

【讨论】:

    【解决方案5】:

    [此解决方案在 Sublime 中显示输出,但作为自动更新的文本文件显示在另一个窗格中]

    要将输出作为另一个文件在 Sublime 中可见,请执行以下操作:

    1. 创建一个新的构建系统:Tools &gt; Build Systems &gt; New Build System...
    2. 使用以下配置:
    { "cmd": ["python.exe", "$file", "1>", "$file_name.__STDOUT__.txt", "2>", "$file_name.__STDERR__.txt"], “选择器”:“source.python”, “壳”:是的, “工作目录”:“$file_dir” }
    1. 为您的 Python 文件选择上述构建系统配置文件:Tools &gt; Build Systems &gt; {your_new_build_system_filename}
    2. ctrl + b
    3. 现在,在您的文件旁边,例如"file.py" 你会有 "file.__STDOUT__.py""file.__STDERR__.py" (如果有错误)
    4. 如果将窗口拆分为 3 列或网格,您将立即看到结果,无需切换面板/窗口

    【讨论】:

      猜你喜欢
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2017-05-23
      相关资源
      最近更新 更多