所以我有很多脚本可以通过键盘快捷键运行,例如将屏幕截图上传到imgur并将链接放在剪贴板中,用于数字化绘图的内容等等。
我有这个当前脚本,它只从终端运行,而不是当我尝试将其作为键盘快捷键运行时。
我试图通过System > Preferences > Keyboard Shortcuts
上的Scientific linux 6.4
运行它。
我已经包含了下面的脚本,以防有任何具体内容可以阻止它工作。
#!/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
它的工作方式是使用xclip
提取剪贴板选择,在文本上使用pygments
,然后创建一个html文档并在firefox中打开它,并将图像上传到imgur (使用我拥有的另一个脚本,我知道100%有效),然后将该图像网址放回剪贴板。
它所在的bin
文件夹位于我的路径中。
我已经尝试了所有:
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
作为command
中的keyboard preferences
。
如果我将这些脚本的内容更改为类似notify-send "hello"
之类的内容,然后生成通知消息,那么我相当自信它会对脚本产生疑问,而不是{ {1}}菜单。
答案 0 :(得分:2)
我遇到了完全相同的问题。以下是我修复它的方法:
首先,我编写了一个单线程shell脚本,看起来像python /home/user/Scripts/script.py
,其中“/home/user/Scripts/script.py”是我的Python的位置。我将此shell脚本放在可执行路径中。
接下来,当我去创建快捷方式时,我没有告诉计算机运行该文件。我告诉计算机启动终端并将shell脚本作为该终端的参数。就我而言,它看起来像:xfce4-terminal -x ralia.sh
。
这适合我。
答案 1 :(得分:0)
可能的问题是$ PATH在您的交互式shell与守护程序或处理键盘快捷键的程序的环境之间存在差异。
在“import os”之后立即尝试:
open("/tmp/debug.txt", "w").write(os.environ["PATH"])
然后使用键盘快捷键运行它并查看/tmp/debug.txt
。
→尝试二进制文件的绝对路径,如果这没有帮助,请考虑jhutar的建议。
答案 2 :(得分:0)
问题出在“with open(”syntax.html“,”w“)为f:”。 使用脚本的键盘快捷键时,请使用脚本中文件的完整路径。
而不是:
with open("syntax.html", "w") as f:
使用:
with open("/home/user/my_script_folder/syntax.html", "w") as f:
将脚本中的所有文件名更改为完整路径,它应该可以正常工作。
答案 3 :(得分:0)
我有一个类似的问题。问题在于,必须使用完整路径才能使其通过键盘快捷键起作用。
就我而言,这不起作用:
#!/bin/bash
python scrypt.py
但是,这确实可行:
#!/bin/bash
python /home/user/bin/scrypt.py