自动键错误,显然与我的脚本无关

自动键错误,显然与我的脚本无关

我编写了一个小型 Autokey 脚本,用于通过某个 URL 全屏启动 Firefox。这个脚本已经运行了好几年。自从系统升级以来,它开始产生一个 Python 错误,这似乎与我的代码无关。尽管出现了错误,但脚本仍然按我的预期运行,即启动一个新的 Firefox 窗口,打开 URL 并最大化窗口。

系统详细信息:

  • Linux Mint 20.1 Cinnamon
  • autokey-gtk 0.95.10
  • Python 3.8.5

脚本已删除注释并编辑部分细节,但保留了行号:

9  system.exec_command("firejail firefox -new-window URL”)
11 time.sleep(1)
12 system.exec_command("wmctrl -r \"Title\" -b add,maximized_vert,maximized_horz")

错误是:

Traceback (most recent call last):
  File “/usr/lib/python3/dist-packages/autokey/service.py”, line 485, in execute
    exec(script,code,scope)
  File “<string>”,line 12,in <module>
  File /usr/lib/python3/dist-packages/autokey/scripting.py”, line 497, in exec_command
    if output[-1]==”\n”:
IndexError: string index out of range

可以看出,我的代码中没有数组。我不是 Python 程序员,我不知道该怎么做才能更正对 的引用output[-1]

任何帮助,将不胜感激。

编辑-添加 scripting.py 摘录

以下是实际引发异常的代码。第 497 行是 if output[-1] ...

这是拼写错误还是 -1 的索引在 Python 中具有特殊含义(字符串的最后一个字符?)?

def exec_command(self, command, getOutput=True):
    """
    Execute a shell command
    
    Usage: C{system.exec_command(command, getOutput=True)}

    Set getOutput to False if the command does not exit and return immediately. Otherwise
    AutoKey will not respond to any hotkeys/abbreviations etc until the process started
    by the command exits.
    
    @param command: command to be executed (including any arguments) - e.g. "ls -l"
    @param getOutput: whether to capture the (stdout) output of the command
    @raise subprocess.CalledProcessError: if the command returns a non-zero exit code
    """
    if getOutput:
        with subprocess.Popen(
                command,
                shell=True,
                bufsize=-1,
                stdout=subprocess.PIPE,
                universal_newlines=True) as p:
            output = p.communicate()[0]
            if output[-1] == "\n":
                # Most shell output has a new line at the end, which we
                # don't want. Drop the trailing newline character
                output = output[:-1]
            if p.returncode:
                raise subprocess.CalledProcessError(p.returncode, output)
            return output
    else:
        subprocess.Popen(command, shell=True, bufsize=-1)

答案1

也许我应该在 Stack Overflow 上发布这个问题,我可能会从 Python 程序员那里得到答案。

我在 git 上找到了文件 scripting.py,发现该行已被更改。我不明白我怎么会安装旧版本,应用程序版本是最新版本。git blame 指出这是该文件中唯一的更改。

修改第 497 行修复了我的错误。从

if output[-1]==”\n”:

if output.endswith("\n"):

相关内容