在GEdit中运行Python快捷方式

8 投票
2 回答
6233 浏览
提问于 2025-04-17 20:44

我想给GEdit设置一个快捷键,比如按F5时可以运行当前打开的.py文件。我有一个脚本可以通过外部终端窗口来实现这个功能,但我在创建一个使用内部输出窗口(我想应该是Shell Output)的版本时遇到了麻烦,因为我找不到一个好的方法来获取~./bashrc文件中的pyenv设置。使用pyenv是必须的。

这是我通过GEdit的外部工具插件得到的:


未解决:内部Shell输出方法:

我想访问~./bashrc中的pyenv设置,所以我尝试了这个外部工具脚本:

#!/bin/bash
set +m
bash -i python $GEDIT_DOCUMENTS_PATH

这个方法可以用(多亏了-i),但它给我一个“bash: no job control in this shell”的警告。运行set +m应该能消除这个消息,但没有效果。

所以我把我在~/.bashrc文件末尾的相关内容移到了这个脚本里,这样做并不理想:

#!/bin/bash

export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
  export PATH="${PYENV_ROOT}/bin:${PATH}"
  eval "$(pyenv init -)"
fi

export PYENV_VERSION=3.3.4
export LD_LIBRARY_PATH=~/.pyenv/versions/3.3.4/lib/python3.3/site-packages/PySide-1.2.1-py3.3.egg/PySide/
python $GEDIT_CURRENT_DOCUMENT_NAME

问题:这个最后的代码块很糟糕。它只是从~/.bashrc复制过来的,甚至还必须包含~/.bashrc应该处理的PySide数据。而且,不知为何,使用这种方法总是输出.py文件的第一行(比如说,import sys)。显然,使用这种方法无法提供input(),而且输出到GEdit的嵌入终端似乎是不可能的。此外,我无法去掉“Done”消息,即使使用set +m或在子shell中运行命令也不行。


已解决:外部终端窗口方法:

#!/bin/sh
gnome-terminal -x $SHELL -ic "python $GEDIT_CURRENT_DOCUMENT_NAME; printf \"\nPress any key to continue.\"; read -n 1 -s"

或者,定义一个叫做Wait的终端配置,设置标题和命令->当终端退出时:保持终端打开,然后这样做:

#!/bin/sh
gnome-terminal --profile=Wait -x $SHELL -ic "python $GEDIT_CURRENT_DOCUMENT_NAME; printf \"\nPress any key to continue.\""

不过,这样会给出一个“status 0”的消息,所以另一种方法更好。这两种方法都使用交互式shell来访问~/.bashrc。

2 个回答

1

我也想要这个功能。在看了你的帖子、回答和评论后,我自己尝试了一下。

如果你只想运行当前打开的文档(我在使用Ubuntu 14.04.4 LTS下的gedit),可以在工具菜单下找到“管理外部工具”,然后按“+”来添加一个新工具:

#!/bin/sh
# run the current document in python
python $GEDIT_CURRENT_DOCUMENT_PATH

这里的$GEDIT_DOCUMENTS_PATH会应用到你当前文档所在文件夹的所有文件夹,但你是想只运行当前文档,对吧?至于其他的建议,我不明白为什么要让事情变得那么复杂,为什么还要再问一次——因为你按下那个键的时候,就是希望它能立刻执行,不是吗?

我自己试过了,效果很好。

6

在GEdit中添加自定义快捷键和功能的步骤:

1) 打开“管理外部工具”。

2) 添加一个工具。

3) 给这个工具起个名字。

4) 输入以下代码:

#!/bin/sh
python $GEDIT_DOCUMENTS_PATH

5) 在框里直接输入功能键 F5,把快捷键设置为F5。

要运行当前文件,首先需要保存它。你现在可以在运行命令后出现的 Shell Output 窗口中看到输出结果,无论是通过 F5 还是手动点击命令。

当然,你可以根据自己的需要进行修改。

撰写回答