gpt4 book ai didi

python - 在 Sublime Text 的路径中执行外部程序

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:12 27 4
gpt4 key购买 nike

我正在尝试为 Sublime 编写一个插件,它将读取当前行的文本,将其作为 shell 命令执行,并将命令的输出放入编辑器中。这是我目前所拥有的:

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 block 中,像这样:

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

无论我尝试什么命令,它都会产生以下输出:

[WinError 6] The handle is invalid

有人知道问题出在哪里,以及如何解决吗?

最佳答案

试试这个:

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)

关于python - 在 Sublime Text 的路径中执行外部程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20531896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com