从命令行(终端)启动Pycharm

tor*_*rho 42 python command-line environment-variables sage pycharm

我想尝试PyCharm进行鼠尾草数学开发.通常我运行eclipse来进行sage开发,但现在我想用PyCharm尝试它.

要使用sage环境变量启动eclipse,在命令行中我通常会执行以下操作:

sage -sh
cd /path/to/eclipse
./eclipse
Run Code Online (Sandbox Code Playgroud)

第一行加载sage环境变量,其余部分启动eclipse.我怎么能为pyCharm做同样的事情?(注意我使用Mac和Ubuntu进行sage开发;上面的命令对两个操作系统都是不可知的)

  1. 链接1接近我正在寻找的解决方案,但我无法在任何地方找到pyCharm.sh.
  2. 链接2:Jetbrains也没有给出明确的指示.

joe*_*est 151

  1. 打开应用程序Pycharm
  2. 在菜单栏中查找工具
  3. 点击 Create Command-line Launcher
  4. 检查已创建的启动器可执行文件 /usr/local/bin/charm
  5. 打开项目或文件只需键入 $ charm YOUR_FOLDER_OR_FILE

愿你这需要.

  • 这应该是接受的答案 (12认同)
  • 事实证明,在ubuntu上默认你已经有了这个文件`/ usr/local/bin/charm`.虽然没有你的小费我就不能轻易找到它.谢谢! (7认同)
  • 有用!谢谢,这个答案应该标记为已接受:) (5认同)
  • 这很棒,因为您还可以打开文件或目录。 (4认同)
  • 注意,OSX在安装时还创建了`charm`二进制文件。太棒了! (2认同)
  • 这在 2019.1 EAP 中消失了。 (2认同)

for*_*ord 15

你是对的,JetBrains帮助页面不是很清楚.在OS X上,您需要在以下位置使用启动器:

/Applications/PyCharm.app/Contents/MacOS/pycharm
Run Code Online (Sandbox Code Playgroud)

或者,对于社区版:

/Applications/PyCharm\ CE.app/Contents/MacOS/pycharm
Run Code Online (Sandbox Code Playgroud)

不幸的是,为这个二进制文件添加一个符号链接对我来说不起作用(启动程序会崩溃).但是设置别名是有效的.将此添加到您的.bash_profile(或您使用的任何shell)中:

alias pycharm="/Applications/PyCharm CE.app/Contents/MacOS/pycharm"
Run Code Online (Sandbox Code Playgroud)

然后,您可以简单地运行命令pycharm.

有了这个你可以做一些事情,比如打开一个项目:

pycharm ~/repos/my-project
Run Code Online (Sandbox Code Playgroud)

或者在项目中打开文件的特定行:

pycharm ~/repos/my-project --line 42 ~/repos/my-project/script.py
Run Code Online (Sandbox Code Playgroud)

或者查看两个文件的差异(它们不需要是项目的一部分):

pycharm ~/some_file.txt ~/Downloads/some_other_file.txt
Run Code Online (Sandbox Code Playgroud)

请注意,我需要将绝对路径传递给这些文件,否则PyCharm无法找到它们.


小智 15

在IDE中,您可以单击:

工具/创建命令行启动器......

创建命令行启动器

  • 正如@Ami Mahloof的回答所指出的那样,可能有必要在PyCharm更新后重新创建此启动器(我的情况是,PyCharm会启动,但不打开给定路径) (2认同)

luc*_*ald 13

苹果系统

无需任何路径的简单解决方案:

open -b com.jetbrains.pycharm <file>
Run Code Online (Sandbox Code Playgroud)



您可以将其设置为别名,以便日常使用更方便(放在您的~/.bash_rc等中):

alias pycharm='open -b com.jetbrains.pycharm'
Run Code Online (Sandbox Code Playgroud)

用法:

# open current dir:
pycharm .
# open a file:
pycharm file.py
Run Code Online (Sandbox Code Playgroud)


Spe*_*y99 8

我通常使用OS X中的内置应用程序启动器(打开)进行别名:

alias pc='open -a /Applications/PyCharm\ CE.app'
Run Code Online (Sandbox Code Playgroud)

然后我可以输入:

pc myfile1.txt myfiles*.py
Run Code Online (Sandbox Code Playgroud)

虽然你不能(容易)通过参数传递给PyCharm,如果你想快速的方法来打开文件(无需使用全路径名的文件),这样做的伎俩.


Ami*_*oof 6

使用 Tools -> Create Command-line Launcher 这将安装一个 python 脚本,您可以在其中使用 char 启动当前工作文件夹。

很重要!

每当您升级 pyCharm 时,您都必须重新创建该命令行工具,因为它只是一个指向 pyCharm 配置的 python 脚本,该配置可能已过时并在您尝试运行时导致它失败 charm .


bot*_*wer 5

更新资料

这是现在可以从JetBrains的工具箱发射器自动创建命令行。这是您的操作方式:

  1. 打开工具箱窗口;
  2. 转到右上角的齿轮图标(工具箱本身的设置窗口);
  3. 开启Generate shell scripts;
  4. Shell script location文本框中填入您希望启动器驻留的位置。您必须手动执行此操作,此时它不会自动填充!

在Mac上,位置可能是/usr/local/bin。对于新手,您可以使用PATH变量内的任何路径,也可以在bash配置文件中为PATH变量添加新路径。用echo $PATH看哪个路径存在。

注意!它对我来说不是立即可用,在脚本生成之前,我不得不花了一些时间。您可以转到IDEA的变速箱(例如PyCharm),然后查看/更改启动器名称。因此,对于PyCharm,默认名称为,pycharm但您可以将其更改为自己喜欢的名称。

原始答案

如果您不使用工具箱,则仍然可以使用我的原始答案。

~~由于某种原因,该Create Command Line Launcher功能于2019.1.1不再可用。~~ 因为它现在是JetBrains Toolbox的一部分

您可以通过以下方式自己创建脚本:

如果在使用前已经使用过charm命令type -a charm来查找脚本。在文件路径中更改pycharm版本。请注意,第一个变量中的编号RUN_PATH是不同的。您必须自己在目录中查找。

RUN_PATH = u'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.1'
Run Code Online (Sandbox Code Playgroud)

如果以前没有使用过charm命令,则必须创建它。

在以下位置创建超级魅力文件: /usr/local/bin/charm

然后添加以下代码(如上所述,将版本号更改为您的版本):

#!/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'/Users/boatfolder/Library/Application Support/JetBrains/Toolbox/apps/PyCharm-P/ch-0/191.6183.50/PyCharm.app'
CONFIG_PATH = u'/Users/boatfolder/Library/Preferences/PyCharm2019.1'
SYSTEM_PATH = u'/Users/boatfolder/Library/Caches/PyCharm2019.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 <left> <right>\n' +
           '  {0} merge <local> <remote> [base] <merged>').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 ':' 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

    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

    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('/usr/bin/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)
Run Code Online (Sandbox Code Playgroud)