2013-12-11 31 views
4

我在为Sublime写一个插件,它将读取当前行的文本,将其作为shell命令执行,并将命令的输出放入编辑器。这是我到目前为止:在Sublime Text的路径中执行外部程序

import sublime, sublime_plugin, os, os.path 
import subprocess 

def GetLineAtCursor(view): 
    pos = view.sel()[0].a 
    reg = view.line(pos) 
    return view.substr(reg) 

class ExecuteLineGetOutputCommand(sublime_plugin.TextCommand): 
    def run(self, edit): 
     line = GetLineAtCursor(self.view).strip().split() 
     output = subprocess.check_output(line,shell=True) 
     self.view.insert(edit, 0, output) 

这是行不通的。具体来说,subprocess.check_output(...)的调用不起作用,虽然它在python解释器中工作正常。我把它放在一个try块,像这样:

try: 
    output = subprocess.check_output(line,shell=True) 
except Exception as e: 
    self.view.insert(edit, 0, str(e)) 

它产生下面的输出,似乎无论什么命令没有我尝试:

​​

有谁知道问题是什么,以及如何修理它?

回答

1

试试这个:

def run(self, edit): 
    line = GetLineAtCursor(self.view).strip().split() 
    cmd = [line, 'attr1', 'attr2'] 

    # if windows 
    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, startupinfo=startupinfo, shell=False, creationflags=subprocess.SW_HIDE) 
    #else unix/macos 
    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  

    output, stderr = p.communicate() 

    if (stderr): 
     print(stderr) 
    self.view.insert(edit, 0, output) 
相关问题