Вопрос-Ответ

Can't send input to running program in Sublime Text

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

Я пытаюсь заставить 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, readline класса Node, scanf в C, cin в C ++ и т.д. Одним из краткосрочных решений является получение Package Control, если у вас его еще нет, а затем установите SublimeREPL. Это позволяет передавать или запускать часть или весь ваш код через запущенный REPL. Может потребоваться некоторая настройка Main.sublime-menu файлов для правильной работы вашего предпочтительного интерпретатора. В качестве альтернативы вы можете использовать отличный плагин Terminus - подробности внизу.

Если выполняемый вами код плохо работает с SublimeREPL (например, вы используете C / C ++ / Java / etc. И вам нужно скомпилировать код перед его запуском), или вы просто хотите запустить его независимо от Sublime, вам нужно создать свою собственную систему сборки. Сохраните следующее как Packages/User/Python_cmd.sublime-build:

Windows

{
"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

И, наконец, вот система сборки для 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:\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, который, среди прочего, предоставляет замену движку системы сборки по умолчанию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

Чтобы дополнить ответ от Шритама Кумара Мунда, сделать привязку ключа для этого:


{ "keys": ["alt+k", "alt+k"], "command": "repl_open", "args": {"cmd": ["python", "-u", "$file_basename"], "cwd": "$file_path", "encoding": "utf8", "extend_env": {"PYTHONIOENCODING": "utf-8"}, " external_id": "python", "синтаксис": "Пакеты/Python/Питон.tmLanguage", "тип": "подпроцесс"}},


Я нашел это, используя следующее в консоли:

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_build, который запускается в cmd при нажатии ctrl+B .

Просто перейдите в инструмент -> sublime build-> новая система сборки и вставьте приведенное ниже как есть;

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


  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
}
python