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

2024-12-03 08:45:00
admin
原创
233
摘要:问题描述:我正在尝试让 Sublime Text 3 运行 Python 脚本。一个简单的两行代码var = raw_input("Enter something: ") print("You entered " + var) 它要求输入,等待输入,然后在 Window...

问题描述:

我正在尝试让 Sublime Text 3 运行 Python 脚本。一个简单的两行代码

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

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

看到网站上有很多类似的问题,这对很多用户来说都是一个问题,所以我浏览了这些问题并尝试了……东西。复制了 exec.py 文件,注释了其中一行,创建了一个新的 pythonw 构建文件,尝试摆弄构建文件……似乎什么都没用。

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


解决方案 1:

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

如果你运行的代码与 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 可执行文件的路径。然后,转到Tools -> Build System并选择Python_cmd,当您点击Ctrl`B构建时,cmd将打开一个新窗口,其中正在运行您的文件。/k`程序运行完成后,该选项将返回命令提示符,而不关闭窗口,以便您可以检查输出、回溯等。

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


macOS

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

{
    "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目录是选择时打开的目录Preferences → Browse 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:UsersYourUserNameAppDataRoamingSublime Text 3Packages`C:UsersYourUserNameAppDataRoamingSublime TextPackages`

  • Windows 便携版安装:InstallationFolderSublime Text 3DataPackages InstallationFolderSublime TextDataPackages

具体路径取决于版本以及您是否从 Sublime Text 3 升级。

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


更新

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

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

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

解决方案 2:

为了补充Shritam Kumar Mund的答案,为此创建一个键绑定:

{ “keys”:[“alt + k”,“alt + k”],“命令”:“repl_open”,“args”:{“cmd”:[“python”,“-u”,“$file_basename”],“cwd”:“$file_path”,“编码”:“utf8”,“extend_env”:{“PYTHONIOENCODING”:“utf-8”},“external_id”:“python”,“语法”:“Packages/Python/Python.tmLanguage”,“type”:“subprocess”}},

我通过在控制台中使用以下命令发现了这一点:

sublime.log_commands(True)

解决方案 3:

Sublime Text 不支持将数据输入到程序中。要使用输入,您需要安装一个名为SublimeREPL的包。请按照以下步骤操作:

  1. 打开 Sublime Text >> CTRL + P

  2. CTRL + P 将打开包控件

  3. 单击包控制:安装包

  4. 等待一秒钟弹出搜索栏。

  5. 输入 SublimeREPL 并单击它。它将在几秒钟内安装完成。

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

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

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

解决方案 4:

您可以使用此sublime_buildctrl文件,当您按下+时它会在 cmd 上运行B

只需转到工具->sublime build->new build system并粘贴下面的内容;

我已经根据我的经验亲自编辑了这个 sublime build 文件,相信我,它有一些很好的功能:

  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 
}

解决方案 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"},
}
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用