【问题标题】:python 3 open terminal and run programpython 3 打开终端并运行程序
【发布时间】:2013-10-07 09:07:53
【问题描述】:

我在 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 或其他键。我正在运行 Windows 7 和 Python 3,如果这很重要的话。

【问题讨论】:

    标签: python python-3.x terminal sublimetext2 subprocess


    【解决方案1】:

    subprocess.Popen 只是用给定的命令创建一个子进程。它与打开终端窗口或任何其他窗口无关。

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

    注意事项:

    此外,您应该使用os.path.join/os.path.split/os.path.sep 等进行路径操作——例如,Sublime 也可以在 OS X 上运行,而 OS X 不使用反斜杠。另外,文件句柄需要关闭,所以使用:

    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:http://www.python.org/dev/peps/pep-0008/

    【讨论】:

    • 感谢您的意见!我会尝试几次,如果有效,请标记它。我很欣赏带有变量前缀的小“挑剔”:)
    • 我很感激你喜欢吹毛求疵——大多数人不喜欢 :)
    • 如果人们不指出我的错误,我该如何改进? :) 这是我第一次编写 Python,所以会出错。此外,如果有人知道如何打开终端并从那里执行命令(Windows 特定是最高优先级平台),请回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 2020-06-28
    相关资源
    最近更新 更多