Python3打开终端并运行程序

Python3打开终端并运行程序,python,python-3.x,terminal,sublimetext2,subprocess,Python,Python 3.x,Terminal,Sublimetext2,Subprocess,我用sublime编写了一个小脚本,它将从用户计算机上的json文件中提取命令,然后它将打开终端并运行设置/命令。这是可行的,只是它不能真正打开终端。它只运行命令(在我的例子中,它可以运行gcc来编译一个简单的C文件),并在不打开终端的情况下将管道传输到STDOUT import json import subprocess import sublime_plugin class CompilerCommand(sublime_plugin.TextCommand): def get

我用sublime编写了一个小脚本,它将从用户计算机上的json文件中提取命令,然后它将打开终端并运行设置/命令。这是可行的,只是它不能真正打开终端。它只运行命令(在我的例子中,它可以运行gcc来编译一个简单的C文件),并在不打开终端的情况下将管道传输到STDOUT

import json
import subprocess

import sublime_plugin

class CompilerCommand(sublime_plugin.TextCommand):
    def get_dir(self, fullpath):
        path = fullpath.split("\\")
        path.pop()
        path = "\\".join(path)
        return path

    def get_settings(self, path):
        _settings_path = path + "\\compiler_settings.json"
        return json.loads(open(_settings_path).read())    

    def run(self, edit):
        _path = self.get_dir(self.view.file_name())
        _settings = self.get_settings(_path)
        _driver = _path.split("\\")[0]

        _command = _driver + " && cd " + _path + " && " + _settings["compile"] + " && " + _settings["exec"]
        proc = subprocess.Popen(_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
我不确定使用
subprocess.Popen
是否是正确的方法,因为我是Python新手


所以要重新迭代;我希望它打开终端,运行命令,让终端保持打开状态,直到用户按下ENTER键或其他什么。如果需要的话,我正在运行Windows7和Python 3。

子流程。Popen
只需使用给定的命令创建一个子流程。这与打开终端窗口或任何其他窗口无关

您必须研究特定于平台的UI自动化解决方案,以实现您的目标。或者看看Sublime插件机制是否已经可以做到这一点

注意事项:

另外,对于路径操作,您应该使用
os.path.join
/
os.path.split
/
os.path.sep
等。例如,升华也在OSX上运行,OSX不使用反斜杠。此外,文件句柄需要关闭,因此请使用:

with open(...) as f:
    return json.load(f)  # also not that there is no nead to f.read()+json.loads()
                         # if you can just json.load() on the file handle
此外,通常应使用字符串插值构建字符串:

_command = "{} && cd {} && {} && {}".format(_driver, _path, _settings["compile"], _settings["exec"])

…而且,您不应该在局部变量前面加上
-它看起来不好看,在Python中也没有任何用途;在我们讨论时,我不妨借此机会推荐您阅读PEP8:。

谢谢您的意见!我会在几分钟内尝试一下,如果它有效的话,我会标记它。我欣赏带有可变前缀的“吹毛求疵”:我欣赏你欣赏大多数人不喜欢的吹毛求疵:)如果人们不指出我的错误,我该如何改进呢这是我第一次编写Python,因此会出现错误。另外,如果有人知道如何打开终端并从那里执行命令(Windows特定平台是最高优先级的平台),请回复。