Не удается отправить ввод в запущенную программу в Sublime Text

Я пытаюсь заставить Sublime Text 3 запустить скрипт Python. Простой двухслойный

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

который запрашивает ввод, ждет его, а затем распечатывает его в приглашении консоли Windows.

Увидев количество подобных вопросов на сайте, это проблема довольно многих пользователей, поэтому я просмотрел их и попробовал ... всякое. Сделал копию файла exec.py, прокомментировал эту строку, создал новый файл сборки pythonw, попытался возиться с файлом сборки... кажется, ничего не работает.

В отсутствие определенного решения, как вы работаете с вводом с помощью Sublime Text?


person Rook    schedule 08.10.2013    source источник
comment
Вы пытаетесь заставить свою систему Python запускать скрипт или сам ST3?   -  person MattDMo    schedule 08.10.2013
comment
@MattDMo - я не знал, что ST3 поставляется в комплекте с Python. Но, в любом случае, я пытаюсь заставить свой системный python (расположенный в c:\python27) запускать его.   -  person Rook    schedule 08.10.2013


Ответы (3)


Sublime Text сам по себе не может обрабатывать ввод через raw_input() (Python 2) или input() (Python 3). То же самое относится и к другим языкам: gets в Ruby, класс Scanner в Java, класс readline в Node, scanf в C, cin в C++ и т. д. Одним из краткосрочных решений является получение 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, и когда вы нажмете CtrlB для сборки, откроется новое 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. Он был протестирован на 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…:

  • Линукс: ~/.config/sublime-text-3/Packages
  • OS X: ~/Library/Application Support/Sublime Text 3/Packages
  • Обычная установка Windows: C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\Packages
  • Переносная установка Windows: InstallationFolder\Sublime Text 3\Data\Packages

Я тестировал эти системы сборки только с 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, как указано выше. Обязательно прочтите документацию, чтобы узнать обо всех других способах использования этого замечательного плагина.

person MattDMo    schedule 10.10.2013
comment
Привет, я помню, как несколько раз использовал это решение на моих разных установках Ubuntu и Linux Mint, и оно работало. Однако некоторое время назад я перестал использовать возвышенное и переустановил свой Linux Mint 17.2, поэтому мне пришлось настраивать его снова, когда я хотел использовать возвышенное. Однако я получаю эту ошибку: start: missing job name Try start --help' для получения дополнительной информации. Что мне делать? - person Rohan; 13.06.2016
comment
@Rohan, как вы можете ясно видеть из тегов вопроса и пути в системе сборки, это решение для Windows, а не для Linux. - person MattDMo; 13.06.2016
comment
@Rohan Нет. start и cmd - это команды Windows - их нет в Linux или OS X. - person MattDMo; 15.06.2016
comment
это работает для меня отлично. Он открывает файл python в командной строке в качестве интерпретатора. Ввод тоже работает отлично. - person Dip; 21.08.2019
comment
что вам может понадобиться, чтобы указать путь к исполняемому файлу Python, если он не указан в вашем $ PATH? - person GILO; 14.02.2021

Sublime Text не поддерживает ввод данных в программу. Для работы с входными данными вам необходимо установить пакет под названием SublimeREPL. Следовать этому:

  1. открыть Sublime Text >> CTRL + P

  2. CTRL + P откроет элемент управления пакетами.

  3. Нажмите «Управление пакетами»: «Установить пакет».
  4. Подождите секунду, чтобы появилась панель поиска.
  5. Введите SublimeREPL и щелкните по нему. Он будет установлен через несколько секунд.

Затем выполните следующие шаги, чтобы запустить программу;

  1. Инструменты >> SublimeREPL >> Python >> Python запустить текущий файл

Откроется новое окно, где вы можете внести свой вклад и получить результат.

person Shritam Kumar Mund    schedule 10.05.2020
comment
Это именно то, что было рекомендовано в другом ответе. - person MattDMo; 01.06.2020

Вы можете использовать этот файл sublime_build, который запускает cmd при нажатии ctrl+B .

Просто зайдите в tool-›sublime build-›new build system и вставьте приведенное ниже как есть;

Я лично отредактировал этот великолепный файл сборки, исходя из своего опыта, и поверьте мне, у него есть несколько хороших функций:

  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 
}
person Durgesh Maurya    schedule 16.01.2021