简体   繁体   English

Python脚本不会在键盘快捷键上运行

[英]Python script won't run on keyboard shortcut

So i have plenty of scripts which i run from keyboard shortcuts, things like uploading screenshots to imgur and putting links in the clipboard, stuff for digitising plots, etc. 所以我有很多脚本,我从键盘快捷键运行,比如上传截图到imgur并将链接放在剪贴板中,用于数字化图形的东西等等。

I have this current script, which only runs from the terminal, and not when i try to run it as a keyboard shortcut. 我有这个当前脚本,它只从终端运行,而不是当我尝试将其作为键盘快捷键运行时。

I'm trying to run it via the System > Preferences > Keyboard Shortcuts on Scientific linux 6.4 . 我正试图通过Scientific linux 6.4上的System > Preferences > Keyboard Shortcuts来运行它。

I've included the script below, in case there's anything specific about it which would stop it from working. 我已经包含了下面的脚本,以防有任何具体的内容可以阻止它工作。

#!/usr/bin/python
import fileinput, os

import subprocess

from pygments import highlight
from pygments.lexers import get_lexer_by_name, guess_lexer
import pygments.formatters as formatters

#stdin = "\n".join([line for line in fileinput.input()])

p = subprocess.Popen(["xclip", "-selection", "primary", "-o"], stdout=subprocess.PIPE)
code, err = p.communicate()

if not err:

  lexer = guess_lexer(code)

  print lexer.name

  imageformatter = formatters.ImageFormatter(linenos=True, cssclass="source", font_name="Liberation Mono")
  formatter = formatters.HtmlFormatter(linenos=True, cssclass="source")

  HTMLresult = highlight(code, lexer, formatter)
  Jpgresult = highlight(code, lexer, imageformatter, outfile=open("syntax.png", "w"))

  with open("syntax.html", "w") as f:

    f.write("<html><head><style media='screen' type='text/css'>")
    f.write(formatters.HtmlFormatter().get_style_defs('.source'))
    f.write("</style></head><body>")
    f.write(HTMLresult)
    f.write("</body></html>")


#  os.system("pdflatex syntax.tex")

  os.system("firefox syntax.html")

  os.system("uploadImage.sh syntax.png")



else:
  print err

The way it works, is by extracting the clipboard selection using xclip , using pygments on the text, and then both creating an html document and opening it in firefox, and uploading an image to imgur (using another script i have, which i know 100% works), and then putting that image url back into the clipboard. 它的工作方式是使用xclip提取剪贴板选择,使用文本上的pygments ,然后创建一个html文档并在firefox中打开它,并将图像上传到imgur(使用我拥有的另一个脚本,我知道100 %工作),然后将该图像网址放回剪贴板。

The bin folder it resides in is in my path. 它所在的bin文件夹位于我的路径中。

I've tried all of: 我尝试了所有:

script
script.sh (where this file is just a shell script which calls the python script)
/home/will/bin/script
/home/will/bin/script.sh

as the command in the keyboard preferences . 作为keyboard preferencescommand

If i change the contents of these scripts to just something like notify-send "hello" , and that then produces the notification message, so i'm fairlyconfident it's a probelm with the script, and not the keyboard shortcuts menu. 如果我将这些脚本的内容更改为notify-send "hello" ,然后生成通知消息,那么我相当自信,这是脚本的问题,而不是keyboard shortcuts菜单。

I ran into exactly the same issue. 我遇到了完全相同的问题。 Here's how I fixed it: 以下是我修复它的方法:

First of all, I wrote a one-liner shell script that looked something like python /home/user/Scripts/script.py where "/home/user/Scripts/script.py" was the location of my Python. 首先,我编写了一个单行shell脚本,看起来像python /home/user/Scripts/script.py ,其中“/home/user/Scripts/script.py”是我Python的位置。 I placed this shell script in the executable path. 我将此shell脚本放在可执行文件路径中。

Next, when I went to make my shortcut, I didn't tell the computer to run the file. 接下来,当我去创建快捷方式时,我没有告诉计算机运行该文件。 I told the computer to start a terminal and gave the shell script as an argument to that terminal. 我告诉计算机启动终端并将shell脚本作为该终端的参数。 In my case, it looked something like: xfce4-terminal -x ralia.sh . 就我而言,它看起来像: xfce4-terminal -x ralia.sh

This works for me. 这适合我。

A possible issue is $PATH being different between your interactive shell and the environment of the daemon or program that handles keyboard shortcuts. 可能的问题是$ PATH在您的交互式shell与守护程序或处理键盘快捷键的程序的环境之间存在差异。

Try right after "import os": 在“import os”之后立即尝试:

open("/tmp/debug.txt", "w").write(os.environ["PATH"])

Then run it with the keyboard shortcut and look at /tmp/debug.txt . 然后使用键盘快捷键运行它并查看/tmp/debug.txt

→ Try absolute paths for the binaries and if that doesn't help, consider jhutar's advice. →尝试二进制文件的绝对路径,如果这没有帮助,请考虑jhutar的建议。

The problem is in "with open("syntax.html", "w") as f:". 问题在于“with open(”syntax.html“,”w“)为f:”。 When using keyboard shortcuts for the script, use full path of the files in the script. 使用脚本的键盘快捷键时,请使用脚本中文件的完整路径。

Instead of: 代替:

with open("syntax.html", "w") as f:

Use: 采用:

with open("/home/user/my_script_folder/syntax.html", "w") as f:

Change all filenames in your script to full path and it should work. 将脚本中的所有文件名更改为完整路径,它应该可以正常工作。

I have had a similar issue. 我有类似的问题。 The problem is that it is necessary to use full paths to make it work using keyboard shortcuts. 问题是必须使用完整路径才能使用键盘快捷键。

In my case, this did not work: 就我而言,这不起作用:

#!/bin/bash
python scrypt.py

However, this did work: 但是,这确实有效:

#!/bin/bash
python /home/user/bin/scrypt.py

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM