Intellij pycharm 从命令行里打开python 文件
1.打开Pycharm
- 打开命令行窗口,编辑环境文件~/.bash_profile happy:~ happ$ vi ~/.bash_profile 增加一行 alias pycharm="/usr/local/bin/charm"
- 修改/usr/local/bin/charm
- vi /usr/local/bin/charm
- 增加内容如下: 第44行之后,增加阴影的部分内容。 7
然后 source ~/.bash_profile 让刚才的环境变量生效. 这样不用重新启动电脑.
测试一下是否有效: 测试成功,确实有效. 发现pycharm 这个有7个字母太长了,我个人建议改短一点。 在vi ~/.bash_profile 文件里,增加一个 alias pc="/usr/local/bin/charm" 这样方便多了,用pc替代pycharm命令, 同时pycharm也可以继续使用. 修改后完整代码如下:
#!/usr/bin/env python
-- coding: utf-8 --
import socket import struct import sys import os import time
see com.intellij.idea.SocketLock for the server side of this interface
RUN_PATH = u’/Applications/PyCharm.app’ CONFIG_PATH = u’/Users/happy/Library/Preferences/PyCharm2018.1’ SYSTEM_PATH = u’/Users/happy/Library/Caches/PyCharm2018.1’
def print_usage(cmd): print((‘Usage: ’ + ’ {0} -h | -? | --help ’ + ’ {0} [project_dir] ’ + ’ {0} [-l|–line line] [project_dir|–temp-project] file[:line] ’ + ’ {0} diff ’ + ’ {0} merge [base] ).format(cmd))
def process_args(argv): args = []
skip_next = False
for i, arg in enumerate(argv[1:]):
if arg == -h or arg == -? or arg == --help:
print_usage(argv[0])
exit(0)
elif i == 0 and (arg == diff or arg == merge or arg == --temp-project):
args.append(arg)
elif arg == -l or arg == --line:
args.append(arg)
skip_next = True
elif skip_next:
args.append(arg)
skip_next = False
else:
path = arg
if not path.startswith(/):
path=os.getcwd()+/+path
#print path
if : in arg:
file_path, line_number = arg.rsplit(:, 1)
if line_number.isdigit():
args.append(-l)
args.append(line_number)
path = file_path
args.append(os.path.abspath(path))
return args
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
with open(port_path) as pf:
port = int(pf.read())
with open(token_path) as tf:
token = tf.read()
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
if found:
cmd = activate + token + + os.getcwd() + + .join(args)
if sys.version_info.major >= 3: cmd = cmd.encode(utf-8)
encoded = struct.pack(>h, len(cmd)) + cmd
s.send(encoded)
time.sleep(0.5) # dont close the socket immediately
return True
return False
def start_new_instance(args): if sys.platform == ‘darwin’: if len(args) > 0: args.insert(0, ‘–args’) os.execvp(‘open’, [’-a’, RUN_PATH] + args) else: bin_file = os.path.split(RUN_PATH)[1] os.execv(RUN_PATH, [bin_file] + args)
ide_args = process_args(sys.argv) if not try_activate_instance(ide_args): start_new_instance(ide_args)
