是否有用于套接字配置端口的JetBrains IDE API?

时间:2019-07-08 11:30:03

标签: java python webstorm jetbrains-ide

我一次使用了许多WebStorm项目。我已经为这些项目的基本脚本制作了Python GUI,并通过在每个项目中运行webstrom .来运行WebStorm。

我想知道其中的哪一个实际上是打开的,因为当我尝试使用python'psutil'时,我只发现第一个打开的项目的java子进程,其余的可能是第一次打开的'额外窗口'

因此,在/usr/local/bin/webstorm.sh中,我发现此脚本正在询问某个端口是否打开了WebStorm,并试图创建下一个实例(如果实际上是这样):

CONFIG_PATH = u'/home/pawel/.WebStorm2019.1/config'
SYSTEM_PATH = u'/home/pawel/.WebStorm2019.1/system'

import socket
import struct
import sys
import time

def try_activate_instance(args):
    port_path = os.path.join(CONFIG_PATH, 'port')
    token_path = os.path.join(SYSTEM_PATH, 'token')
    if not (os.path.exists(port_path) and os.path.exists(token_path)):
        return False

    try:
        with open(port_path) as pf:
            port = int(pf.read())
        with open(token_path) as tf:
            token = tf.read()
    except (ValueError):
        return False

    s = socket.socket()
    s.settimeout(0.3)
    try:
        s.connect(('127.0.0.1', port))
    except (socket.error, IOError):
        return False

    found = False
    while True:
        try:
            path_len = struct.unpack('>h', s.recv(2))[0]
            path = s.recv(path_len).decode('utf-8')
            if os.path.abspath(path) == os.path.abspath(CONFIG_PATH):
                found = True
                break
        except (socket.error, IOError):
            return False

    print(found)
    if found:
        cmd = 'activate ' + token + '\0' + os.getcwd() + '\0' + '\0'.join(args)
        if sys.version_info[0] >= 3: cmd = cmd.encode('utf-8')
        encoded = struct.pack('>h', len(cmd)) + cmd
        s.send(encoded)
        time.sleep(0.5)  # don't close the socket immediately
        return True

    return False


try_activate_instance([])

除了activate [token]或JetBrains Wiki之外,是否还有其他关于它们的命令,例如:

  • 'isactive [token] [project_name]'-返回是否打开了该目录中的项目

  • '目标[token] [project_name]'-将项目窗口移至Linux顶部

0 个答案:

没有答案