1. 程式人生 > >Intellij pycharm 從命令列裡開啟python 檔案

Intellij pycharm 從命令列裡開啟python 檔案

1.開啟Pycharm
在這裡插入圖片描述

在這裡插入圖片描述

  1. 開啟命令列視窗,編輯環境檔案~/.bash_profile
    happy:~ happ$ vi ~/.bash_profile
    增加一行
    alias pycharm="/usr/local/bin/charm"
    在這裡插入圖片描述
  2. 修改/usr/local/bin/charm
  3. vi /usr/local/bin/charm
  4. 增加內容如下: 第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:\n’ +
’ {0} -h | -? | --help\n’ +
’ {0} [project_dir]\n’ +
’ {0} [-l|–line line] [project_dir|–temp-project] file[:line]\n’ +
’ {0} diff \n’ +
’ {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 + '\0' + os.getcwd() + '\0' + '\0'.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)  # don't 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)