提问人:Rook 提问时间:10/9/2013 最后编辑:MattDMoRook 更新时间:12/11/2022 访问量:53795
无法将输入发送到Sublime Text中正在运行的程序
Can't send input to running program in Sublime Text
问:
我正在尝试让 Sublime Text 3 运行 Python 脚本。简单的两衬垫
var = raw_input("Enter something: ")
print("You entered " + var)
它要求输入,等待它,然后在 Windows 控制台提示符中打印出来。
看到网站上类似问题的数量,这对很多用户来说都是一个问题,所以我浏览了这些问题并尝试了......东西。复制了 exec.py 文件,注释了那一行,制作了一个新的 pythonw 构建文件,尝试弄乱构建文件......似乎没有任何效果。
在缺乏明确的解决方案的情况下,您如何使用 Sublime Text 处理输入?
答:
Sublime Text 本身无法通过 (Python 2) 或 (Python 3) 处理输入。其他语言也是如此 - Ruby的,Java的类,Node的类,C,C++等。一个短期的解决方案是获取Package Control,如果你还没有它,然后安装SublimeREPL。它允许您通过正在运行的 REPL 传输或运行部分或全部代码。可能需要对文件进行一些配置,才能使首选解释器正常运行。或者,您可以使用出色的 Terminus 插件 - 详细信息在底部。raw_input()
input()
gets
Scanner
readline
scanf
cin
Main.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_cmd
CtrlBcmd
/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-terminal
Packages/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\Packages
C:\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 可执行文件的路径,如上所述。确保您阅读了文档,以了解可以使用这个出色插件的所有其他方法。
评论
start: missing job name Try
start
cmd
Sublime Text 不支持将数据输入到程序中。要使用输入,您需要安装一个名为SublimeREPL的软件包。 按照这个:
打开 Sublime Text >> CTRL + P
CTRL + P 将打开“包”控件
- 单击“Package Control: Install package”(包控制:安装包)
- 等待一秒钟弹出搜索栏。
- 键入 SublimeREPL 并单击它。 它将在几秒钟内安装。
然后按照以下步骤运行程序;
- SublimeREPL >> Python >> Python 运行当前文件>>工具
它将打开一个新窗口,您可以在其中提供输入并获取输出。
您可以使用此sublime_build文件,当您按 + 时,它会在 cmd 上运行。ctrlB
只需转到工具 ->sublime build->new 构建系统并按原样粘贴以下给定的内容;
我根据我的经验亲自编辑了这个崇高的构建文件,相信我它有一些很好的功能:
- 程序终止或结束时颜色变化
- 交互式输出和输入
- 控制台窗口自动打开
- 程序完成后暂停并等待进入
{
"cmd":["start", "cmd", "/c" ,"python $file && color b0 && pause"],
"selector": "source.python",
"working_dir": "${file_path}",
"file_regex": "(.+):(\\d+): error: ",
"shell": true
}
为了补充 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)
感谢@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"},
}
评论