我一次使用了许多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顶部