Stefano Borini
Stefano Borini

Reputation: 143925

How can I run a shell script instead of python in a PyCharm run configuration?

I am trying to setup PyCharm to invoke a shell script, instead of python, as the run option. Is this possible? In the default options I only have Python, Python docs, and Python tests. With the professional edition I also have Django and others. However, they all have python as the interpreter in a combobox and they can't be changed as far as I can see.

Upvotes: 34

Views: 44499

Answers (5)

Boketto
Boketto

Reputation: 927

Just came across this post... as of today (2024) it is possible and super easy to invoke a shell script in the PyCharm run command. I have PyCharm Professional, so I cannot tell if this is available in the free version.

  1. Open the Run/Debug Configurations (e.g. click on the menu left to the Play button > Edit Configurations...)

2.Click the plus sign and select "Shell Script"

Screenshot

Upvotes: 0

jan-hybs
jan-hybs

Reputation: 724

Another hacky solution to this is altering the config/options/jdk.table.xml file in your PyCharm's configuration folder. You simple add another entry in your jdks list:

<jdk version="2">
  <name value="Python 3.7 (docker)" />
  <type value="Python SDK" />
  <version value="Python 3.7.0" />
  <homePath value="/path/to/your/shell.sh" />
  <roots>
    <classPath>
      <root type="composite" />
    </classPath>
    <sourcePath>
      <root type="composite" />
    </sourcePath>
  </roots>
  <additional />
</jdk>

After that just select your interpreter for your project and you can use this shell as your interpreter. I used this solution when using interpreter inside docker's image.

Upvotes: 1

Piotr Dobrogost
Piotr Dobrogost

Reputation: 42465

If you want to see such a feature in PyCharm please vote on IDEA-112256 'Command Line' Run Configuration feature request.


Run/Debug Configurations section of Pycharm's online help lists all supported types of Run/Debug configurations and there's no support for shell scripts indeed. However, you might be able to add such support by installing a plugin. For example, if you are interested in bash scripts there's BashSupport plugin which adds support for running shell scripts in Run/Debug configuration.

From plugins' home page:

BashSupports can directly run scripts within IntelliJ. You can create a new run configuration for Bash scripts. Here you can set which interpreter is used to run it. Whenever a script is executed the output is logged. If Bash prints out syntax errors then the errorneous lines are clickable to jump to the location of the error.

For Windows there's CmdSupport plugin which provides an action to run .cmd scripts. It seems it does not support running such scripts as Run/Debug configuration however.

As a workaround you can use Python run/debug configuration, specifying some dummy (empty) Python file to run and use Before launch option specifying External tool and specify path to the script when adding/configuring this external tool. See In IntelliJ IDEA, how can I create a key binding that executes a shell script with the current file as a parameter? for details.

As PyCharm is based on IntelliJ's IDEA platform the question IntelliJ IDEA: Running a shell script as a Run/Debug Configuration is very related.


Speaking of run/debug configurations you might be interested in the plugin Run Configuration as Action which

(...) provides a way to use run configurations as buttons on toolbar. Or assign shortcuts to execute specific run configuration.

Upvotes: 24

user6316071
user6316071

Reputation: 61

This is really a missing feature that normally should be considered as basic functionality. There are two options

  1. First i tried to create a standard (empty) Python configuration and used the "Before launch"->External tool option, therefore you must create a new external tool definition with Tool Settings:

    • Program: cmd.exe
    • Parameters: /C your-batch-file.bat
    • Working directory $ProjectFileDir$ (In my case $ProjectPath$ was empty)

    The annoying thing about this solution is, that the "external tool" standard output is redirected to an extra tab in the console log window which is immediately going into the background when the dummy Python Configuration is executed afterwards.

  2. Second and better is to use python to execute the command. Normally i always use subprocess module but in this case os.system() is the nice and minimal solution. The python run configuration then looks like this
    • Script: (empty)
    • Parameters: -c "import os; os.system('your-batch-file')"
    • Working directory: (select project directory, unfortunately no macros here)

Upvotes: 6

S. Stromberg
S. Stromberg

Reputation: 79

I think the easiest way is to just write a python script that calls the .bat file, and then run that:

from subprocess import Popen

p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder")
stdout, stderr = p.communicate()

Upvotes: 2

Related Questions