簡體   English   中英

python 3打開終端並運行程序

[英]python 3 open terminal and run program

我在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。

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/。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM