无法将输入发送到Sublime Text中正在运行的程序

Can't send input to running program in Sublime Text

提问人:Rook 提问时间:10/9/2013 最后编辑:MattDMoRook 更新时间:12/11/2022 访问量:53795

问:

我正在尝试让 Sublime Text 3 运行 Python 脚本。简单的两衬垫

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

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

看到网站上类似问题的数量,这对很多用户来说都是一个问题,所以我浏览了这些问题并尝试了......东西。复制了 exec.py 文件,注释了那一行,制作了一个新的 pythonw 构建文件,尝试弄乱构建文件......似乎没有任何效果。

在缺乏明确的解决方案的情况下,您如何使用 Sublime Text 处理输入?

python 输入 sublimetext3 sublimetext sublime-build

评论

0赞 MattDMo 10/9/2013
你是想让你的系统 Python 运行脚本,还是 ST3 本身?
0赞 Rook 10/9/2013
@MattDMo - 我不知道 ST3 与 python 捆绑在一起。但是,无论如何,我正在尝试让我的系统python(位于c:\python27)运行它。

答:

36赞 MattDMo 10/10/2013 #1

Sublime Text 本身无法通过 (Python 2) 或 (Python 3) 处理输入。其他语言也是如此 - Ruby的,Java的类,Node的类,C,C++等。一个短期的解决方案是获取Package Control,如果你还没有它,然后安装SublimeREPL。它允许您通过正在运行的 REPL 传输或运行部分或全部代码。可能需要对文件进行一些配置,才能使首选解释器正常运行。或者,您可以使用出色的 Terminus 插件 - 详细信息在底部。raw_input()input()getsScannerreadlinescanfcinMain.sublime-menu

如果你正在运行的代码不能很好地与SublimeREPL配合(例如,你使用的是C/C++/Java/等,需要在运行之前编译代码),或者你只是想独立于Sublime运行它,你需要创建自己的构建系统。将以下内容另存为:Packages/User/Python_cmd.sublime-build

窗户

{
    "cmd": ["start", "cmd", "/k", "c:/python38/python.exe", "$file"],
    "selector": "source.python",
    "shell": true,
    "working_dir": "$file_dir",
    "env": {"PYTHONIOENCODING": "utf-8"}
}

根据需要更改 Python 可执行文件的路径。然后,转到“工具”->“构建系统”并选择 ,当您点击构建时,将打开一个新窗口,其中正在运行您的文件。在程序运行完毕后,该选项将返回到命令提示符,而不关闭窗口,以便您可以检查输出、回溯等。Python_cmdCtrlBcmd/k

请注意,此构建系统是特定于 Windows 的,因为 macOS 和 Linux 没有 .这些平台的构建系统如下。cmd


macOS操作系统

如果您运行的是 OS X/macOS,则以下构建系统将在新的终端实例中打开您的程序。另存为 .在我在 macOS 10.15 上的测试中,终端窗口在激活时并不总是出现在顶部,因此您可能需要在其他窗口后面查找它。Packages/User/Python_Terminal.sublime-build

{
    "shell_cmd": "osascript -e 'tell app \"Terminal\" to do script \"cd $file_path && python3 -u $file\"'",
    "working_dir": "$file_path",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"}
}

如果 Python 可执行文件不在 .$PATH


Linux操作系统

最后,这里是一个 Linux 的构建系统。它是在 Ubuntu 上测试的,因此如果您使用其他发行版,则需要确保已安装。另存为 .程序运行完毕后,按任意键关闭窗口。gnome-terminalPackages/User/Python_shell.sublime-build

{
    "shell_cmd": "gnome-terminal --working-directory=$file_path -- bash -c 'python3 -u \"$file\" && read -n 1 -s -r'",
    "working_dir": "$file_path",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"}
}

作为参考,该目录是在选择“首选项”→“浏览包...”时打开的目录:Packages

  • Linux:或~/.config/sublime-text-3/Packages~/.config/sublime-text/Packages
  • OS X:或~/Library/Application Support/Sublime Text 3/Packages~/Library/Application Support/Sublime Text/Packages
  • Windows 常规安装:或C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\PackagesC:\Users\YourUserName\AppData\Roaming\Sublime Text\Packages
  • Windows 便携版安装:InstallationFolder\Sublime Text 3\Data\Packages InstallationFolder\Sublime Text\Data\Packages

确切的路径取决于版本以及您是否从 Sublime Text 3 升级。

我只用 Python 测试了这些构建系统,但它们应该适用于任何语言。修改时,只需确保所有单引号和双引号都匹配 - 如果不匹配,您将收到错误或意外行为。


更新

有一个名为 Terminus 的独立于平台的插件,除其他外,它还为默认构建系统引擎提供了直接替代品。它允许您在代码下方的构建面板中与程序进行交互。从包控制安装它后,创建以下生成系统(同样,适用于 Python):exec

{
    "target": "terminus_exec",
    "cancel": "terminus_cancel_build",
    "cmd": [
        "/path/to/python", "-u", "$file"
    ],
    "working_dir": "$file_path",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
}

您需要调整 Python 可执行文件的路径,如上所述。确保您阅读了文档,以了解可以使用这个出色插件的所有其他方法。

评论

0赞 Rohan 6/14/2016
嗨,我记得之前在我不同的 Ubuntu 和 Linux Mint 安装中多次使用此解决方案,并且它正在工作。但是,我不久前停止使用 sublime,并且我已经重新安装了我的 Linux Mint 17.2,所以当我想使用 sublime 时,我不得不再次设置它。但是,我收到此错误:start --help'以获取更多信息。 我该怎么办?start: missing job name Try
0赞 MattDMo 6/14/2016
@Rohan从问题的标签和构建系统中的路径可以清楚地看到,这是针对 Windows 的解决方案,而不是 Linux。
0赞 MattDMo 6/15/2016
@Rohan号 并且是 Windows 命令 - 它们在 Linux 或 OS X 中不存在。startcmd
0赞 Dip 8/21/2019
这对我非常有效。它在命令提示符下以解释器身份打开 python 文件。输入也工作得很好。
0赞 GILO 2/14/2021
“如果 Python 可执行文件不在 $PATH 上,您可能需要指定它的路径”是什么意思?
0赞 Shritam Kumar Mund 5/10/2020 #2

Sublime Text 不支持将数据输入到程序中。要使用输入,您需要安装一个名为SublimeREPL的软件包。 按照这个:

  1. 打开 Sublime Text >> CTRL + P

  2. CTRL + P 将打开“包”控件

  3. 单击“Package Control: Install package”(包控制:安装包)
  4. 等待一秒钟弹出搜索栏。
  5. 键入 SublimeREPL 并单击它。 它将在几秒钟内安装。

然后按照以下步骤运行程序;

  1. SublimeREPL >> Python >> Python 运行当前文件>>工具

它将打开一个新窗口,您可以在其中提供输入并获取输出。

0赞 Durgesh Maurya 1/16/2021 #3

您可以使用此sublime_build文件,当您按 + 时,它会在 cmd 上运行。ctrlB

只需转到工具 ->sublime build->new 构建系统并按原样粘贴以下给定的内容;

我根据我的经验亲自编辑了这个崇高的构建文件,相信我它有一些很好的功能:

  1. 程序终止或结束时颜色变化
  2. 交互式输出和输入
  3. 控制台窗口自动打开
  4. 程序完成后暂停并等待进入
{
"cmd":["start", "cmd", "/c" ,"python $file && color b0 && pause"],
"selector": "source.python",
"working_dir": "${file_path}",
"file_regex": "(.+):(\\d+): error: ",
"shell": true 
}
1赞 perplexed 8/20/2021 #4

为了补充 Shritam Kumar Mund 的答案,为此进行键绑定:

{ “keys”: [“alt+k”, “alt+k”], “command”: “repl_open”, “args”: {“cmd”: [“python”, “-u”, “$file_basename”], “cwd”: “$file_path”, “编码”: “utf8”, “extend_env”: {“PYTHONIOENCODING”: “utf-8”}, “external_id”: “python”, “syntax”: “Packages/Python/Python.tmLanguage”, “type”: “子进程”}},

我通过在控制台中使用以下内容找到了这一点:

sublime.log_commands(True)
0赞 Bowen 404 11/8/2021 #5

感谢@MattDMo的回答,它不需要安装任何插件。但是在我在macOS中尝试了该命令之后:

"shell_cmd": "osascript -e 'tell app \"Terminal\" to do script \"cd $file_path && python3 -u $file\"'",

我发现它似乎每次都从后台运行,这很不方便。

于是我尝试了另一种方法:用 temp.sh 来运行。命令如下:

"cmd": ["zsh", "-c", "echo \"python3 ${file}\" > /tmp/tmp.sh ; chmod +x /tmp/tmp.sh ; open -a Terminal /tmp/tmp.sh ; sleep 2 ;rm /tmp/tmp.sh"],

这个方法前面会弹出一个新窗口,稍作修改后在其他平台上应该可以行,但我没有尝试。

以下是“python_input.sublime-build”中的完整内容:

{
    "cmd": ["zsh", "-c", "echo \"python3 ${file}\" > /tmp/tmp.sh ; chmod +x /tmp/tmp.sh ; open -a Terminal /tmp/tmp.sh ; sleep 2 ;rm /tmp/tmp.sh"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${file_path}",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf-8"},
}