2014-11-04 67 views
3

所以我有很多,我從鍵盤快捷鍵,事情辦得如上傳截圖imgur並把鏈接在剪貼板,工具和數字化繪圖腳本等Python腳本不會對鍵盤快捷方式運行

我有這個當前腳本,它只能從終端運行,而不是當我嘗試將其作爲鍵盤快捷方式運行時。

我試圖通過Scientific linux 6.4上的System > Preferences > Keyboard Shortcuts來運行它。

我已經包含了下面的腳本,以防有什麼具體的事情會阻止它工作。

#!/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,然後都建立在Firefox中的HTML文件,並打開它,並上傳圖片到imgur(使用其他腳本我有,我知道100%的作品),然後把這個圖像url回到剪貼板。

它所在的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 

作爲keyboard preferencescommand

如果我將這些腳本的內容更改爲notify-send "hello"之類的內容,然後生成通知消息,所以我相當自信它是一個與腳本相關的問題,而不是keyboard shortcuts菜單。

+0

我會把'notify-send「hello」'放到腳本的各個位置,以隔離確切的線路導致問題。然後你可以繼續前進。當通過鍵盤快捷方式調用腳本時,腳本的某些部分可能需要某些您不具備的環境? – jhutar 2014-11-14 20:56:17

+1

另一個重要的事情是嘗試捕獲腳本的輸出。如果你有'script.sh'包裝器,你可以嘗試通過類似'/home/will/bin/problematic_script.py&>/tmp/script.log'的方式將stdout和stderr(和其他)重定向到文件。也許這會提供更多的線索? – jhutar 2014-11-14 20:58:43

回答

0

可能的問題是您的交互式shell和處理鍵盤快捷方式的守護進程或程序的環境之間的$ PATH不同。

嘗試之後 「導入OS」:

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

然後使用鍵盤快捷鍵運行它,並期待在/tmp/debug.txt

→嘗試二進制文件的絕對路徑,如果沒有幫助,請考慮jhutar的建議。

+0

我有其他腳本,我在同一個文件夾中以完全相同的方式運行,但它們工作正常。 – will 2015-03-11 21:43:24

2

我遇到了完全相同的問題。下面是我如何修復它:

首先,我寫了一個類似於python /home/user/Scripts/script.py的單線程shell腳本,其中「/home/user/Scripts/script.py」是我的Python的位置。我把這個shell腳本放在可執行文件路徑中。

接下來,當我去做快捷方式時,我沒有告訴計算機運行該文件。我告訴計算機啓動一個終端,並將該shell腳本作爲該終端的參數。就我而言,它看起來像這樣:xfce4-terminal -x ralia.sh

這適用於我。

+0

我不再使用這臺電腦,但如果這真的是一個*解決方案*,那麼這是一個荒謬的! – will 2015-07-10 09:52:38

+1

荒謬?是。它工作嗎?是。 我確實找到了一個更好的方法來做到這一點。您可以刪除shell腳本中間人,而是在啓動程序行上放置'xfce4-terminal -x python/home/user/scripts/python_scripts.py'。 – 2015-07-11 04:04:56

0

問題出現在「with open(」syntax.html「,」w「)as f:」。 使用腳本的鍵盤快捷鍵時,請使用腳本中文件的完整路徑。

相反的:

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

用途:

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

更改所有文件名在腳本中完整路徑,它應該工作。