如何确定子进程启动的编辑器是Sublime还是Textedit

时间:2014-02-14 17:47:10

标签: python subprocess

我正在启动一个编辑器,编辑器的路径传递给下面的函数,但如果编辑器是崇高的或其他文本编辑器,我没有更好的方法,我们可以启动vinanosubprocess.call(launchEditor = [editor, fileToOpen])类似,但是崇高路径包含-n-w标记附加在作为编辑器传递的路径上,这就是为什么当我尝试使用sublime启动时找不到错误路径的原因下面的方法,有什么方法可以获得应用程序名称,无论是sublime,textedit还是vi或nano?

def launchEditor(editor):

    with tempfile.NamedTemporaryFile(delete=False) as f:
        f.close()
        fileName = f.name
            # the below line is not a better solution.
        if re.search('Sublime_Text', editor):
            launchEditor = [editor.split(" ")[0], "-w", fileName]
        else:
            launchEditor = [editor, fileName]

        if subprocess.call(launchEditor) != 0:
            raise IOError("%s exited with code." % (editor.split(" ")[0]))
        msg = ''
        with open(fileName) as temp_file:
            temp_file.seek(0)
            for line in temp_file.readlines():
                msg += line

            return "".join(msg)

editor参数的sublime情况下的示例路径 /Applications/Sublime_Text.app/Contents/SharedSupport/bin/subl -n -w其他vinano ..

2 个答案:

答案 0 :(得分:4)

您能告诉我们“编辑”的一些例子吗?

由于我不知道editor变量是如何填充的,所以我猜你正在填充它。然后你可以做这样的事情:

launchEditor("vi {0}")
launchEditor("/your/path/Sublime_Text -w {0}")

然后在函数中你可以使用

launchEditor = editor.format(fileName).split(" ")

答案 1 :(得分:0)

我认为你正在接近这个问题。问题是没有找到你是否被给予某个文本编辑器,问题是你被赋予了一个包含破坏你的脚本的标志的编辑器的路径。而是检测标志。

if "-" in editor:
    # handle it

你甚至可以批发他们

import re
re.replace("\b-.*","",editor)
# this will fail extraordinarily if your path contains dash-beginning words
# e.g. "path/to/sublime -editor/is/sublime.exe -n -w"