Sublimetext3 如何创建崇高的文本3构建系统,阅读shebang

Sublimetext3 如何创建崇高的文本3构建系统,阅读shebang,sublimetext3,shebang,build-system,Sublimetext3,Shebang,Build System,如何在Sublime Text 3中创建一个构建系统,其中“cmd”被一个shebang替换(如果它存在的话) 更具体地说,是否有办法改变Python构建系统,以使用shebang中指定的Python版本,如果没有shebang,则使用默认值?如果您认为使用标准的文件执行此操作的唯一方法是将文件传递给另一个脚本,该脚本随后解析shebang并将其传递给正确的Python版本 或者,您可以指定,但随后必须手动选择所需的生成变量。升华生成系统有一个名为target的选项,该选项指定要调用以执行生成的

如何在Sublime Text 3中创建一个构建系统,其中
“cmd”
被一个shebang替换(如果它存在的话)


更具体地说,是否有办法改变Python构建系统,以使用shebang中指定的Python版本,如果没有shebang,则使用默认值?

如果您认为使用标准的
文件执行此操作的唯一方法是将文件传递给另一个脚本,该脚本随后解析shebang并将其传递给正确的Python版本


或者,您可以指定,但随后必须手动选择所需的生成变量。

升华生成系统有一个名为
target
的选项,该选项指定要调用以执行生成的
WindowCommand
。默认情况下,这是内部
exec
命令。您可以创建自己的命令来检查文件中的shebang,并使用该解释器或其他一些默认命令

例如(注意:我不是非常精通Python,所以这可能非常难看):

您可以将其保存在
Packages/User
中作为python文件(例如
shebanger.py

这将创建一个名为
shebanger
的新命令,该命令收集给定的参数,在触发生成的窗口的当前活动视图中检查文件,以查看第一行是否为shebang,然后合成
exec
命令所需的参数并运行它

由于默认的python构建系统假定它正在构建当前文件并将
-u
作为参数传递,因此这也是该命令复制的内容。但是请注意,这段代码不是100%正确的,因为shebang行中的任何参数都将被忽略,但您可以了解一般的想法

在使用中,您可以修改默认的
Python.sublime build
文件,如下所示:

{
    // WindowCommand to execute for this build
    "target": "shebanger",

    // Use this when there is no shebang
    "interpreter_default": "python",

    // Args to pass to the interpreter
    "interpreter_args": ["-u"],

    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",

    "env": {"PYTHONIOENCODING": "utf-8"},

    "variants":
    [
        {
            "name": "Syntax Check",
            "interpreter_args": ["-m py_compile"],
        }
    ]
}

注意,在变量中,我们覆盖了解释器参数;如果需要,您也可以覆盖那里的默认解释器。

My python.sublime-build

{
    "cmd": ["py", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "shell":true
}

在windows中,我使用py launcher根据shebang检测版本

这看起来很有希望,我会让你知道它是如何运行的。非常感谢。
{
    "cmd": ["py", "-u", "$file"],
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "shell":true
}