190 lines
6.1 KiB
Markdown
190 lines
6.1 KiB
Markdown
|
|
title: Command Line
|
||
|
|
|
||
|
|
Using Python-Markdown on the Command Line
|
||
|
|
=========================================
|
||
|
|
|
||
|
|
While Python-Markdown is primarily a python library, a command line script is
|
||
|
|
included as well. While there are many other command line implementations
|
||
|
|
of Markdown, you may not have them installed, or you may prefer to use
|
||
|
|
Python-Markdown's various extensions.
|
||
|
|
|
||
|
|
Generally, you will want to have the Markdown library fully installed on your
|
||
|
|
system to run the command line script. See the
|
||
|
|
[Installation instructions](install.md) for details.
|
||
|
|
|
||
|
|
Python-Markdown's command line script takes advantage of Python's `-m` flag.
|
||
|
|
Therefore, assuming the python executable is on your system path, use the
|
||
|
|
following format:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown [options] [args]
|
||
|
|
```
|
||
|
|
|
||
|
|
That will run the module as a script with the options and arguments provided.
|
||
|
|
|
||
|
|
At its most basic usage, one would simply pass in a file name as the only argument:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown input_file.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
Piping input and output (on `STDIN` and `STDOUT`) is fully supported as well.
|
||
|
|
For example:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
echo "Some **Markdown** text." | python -m markdown > output.html
|
||
|
|
```
|
||
|
|
|
||
|
|
Use the `--help` option for a list all available options and arguments:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown --help
|
||
|
|
```
|
||
|
|
|
||
|
|
If you don't want to call the python executable directly (using the `-m` flag),
|
||
|
|
follow the instructions below to use a wrapper script:
|
||
|
|
|
||
|
|
Setup
|
||
|
|
-----
|
||
|
|
|
||
|
|
Upon installation, the `markdown_py` script will have been copied to
|
||
|
|
your Python "Scripts" directory. Different systems require different methods to
|
||
|
|
ensure that any files in the Python "Scripts" directory are on your system
|
||
|
|
path.
|
||
|
|
|
||
|
|
* **Windows**:
|
||
|
|
|
||
|
|
Assuming a default install of Python on Windows, your "Scripts" directory
|
||
|
|
is most likely something like `C:\\Python37\Scripts`. Verify the location
|
||
|
|
of your "Scripts" directory and add it to you system path.
|
||
|
|
|
||
|
|
Calling `markdown_py` from the command line will call the wrapper batch
|
||
|
|
file `markdown_py.bat` in the `"Scripts"` directory created during install.
|
||
|
|
|
||
|
|
* __*nix__ (Linux, OSX, BSD, Unix, etc.):
|
||
|
|
|
||
|
|
As each \*nix distribution is different and we can't possibly document all
|
||
|
|
of them here, we'll provide a few helpful pointers:
|
||
|
|
|
||
|
|
* Some systems will automatically install the script on your path. Try it
|
||
|
|
and see if it works. Just run `markdown_py` from the command line.
|
||
|
|
|
||
|
|
* Other systems may maintain a separate "Scripts" ("bin") directory which
|
||
|
|
you need to add to your path. Find it (check with your distribution) and
|
||
|
|
either add it to your path or make a symbolic link to it from your path.
|
||
|
|
|
||
|
|
* If you are sure `markdown_py` is on your path, but it still is not being
|
||
|
|
found, check the permissions of the file and make sure it is executable.
|
||
|
|
|
||
|
|
As an alternative, you could just `cd` into the directory which contains
|
||
|
|
the source distribution, and run it from there. However, remember that your
|
||
|
|
markdown text files will not likely be in that directory, so it is much
|
||
|
|
more convenient to have `markdown_py` on your path.
|
||
|
|
|
||
|
|
!!!Note
|
||
|
|
Python-Markdown uses `"markdown_py"` as a script name because the Perl
|
||
|
|
implementation has already taken the more obvious name "markdown".
|
||
|
|
Additionally, the default Python configuration on some systems would cause a
|
||
|
|
script named `"markdown.py"` to fail by importing itself rather than the
|
||
|
|
markdown library. Therefore, the script has been named `"markdown_py"` as a
|
||
|
|
compromise. If you prefer a different name for the script on your system, it
|
||
|
|
is suggested that you create a symbolic link to `markdown_py` with your
|
||
|
|
preferred name.
|
||
|
|
|
||
|
|
Usage
|
||
|
|
-----
|
||
|
|
|
||
|
|
To use `markdown_py` from the command line, run it as
|
||
|
|
|
||
|
|
```bash
|
||
|
|
markdown_py input_file.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
or
|
||
|
|
|
||
|
|
```bash
|
||
|
|
markdown_py input_file.txt > output_file.html
|
||
|
|
```
|
||
|
|
|
||
|
|
For a complete list of options, run
|
||
|
|
|
||
|
|
```bash
|
||
|
|
markdown_py --help
|
||
|
|
```
|
||
|
|
|
||
|
|
Using Extensions
|
||
|
|
----------------
|
||
|
|
|
||
|
|
To load a Python-Markdown extension from the command line use the `-x`
|
||
|
|
(or `--extension`) option. The extension module must be on your `PYTHONPATH`
|
||
|
|
(see the [Extension API](extensions/api.md) for details). The extension can
|
||
|
|
then be invoked by the name assigned to an entry point or using Python's dot
|
||
|
|
notation to point to an extension
|
||
|
|
|
||
|
|
For example, to load an extension with the assigned entry point name `myext`,
|
||
|
|
run the following command:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown -x myext input.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
And to load an extension with Python's dot notation:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown -x path.to.module:MyExtClass input.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
To load multiple extensions, specify an `-x` option for each extension:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown -x myext -x path.to.module:MyExtClass input.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
If the extension supports configuration options (see the documentation for the
|
||
|
|
extension you are using to determine what settings it supports, if any), you
|
||
|
|
can pass them in as well:
|
||
|
|
|
||
|
|
```bash
|
||
|
|
python -m markdown -x myext -c config.yml input.txt
|
||
|
|
```
|
||
|
|
|
||
|
|
The `-c` (or `--extension_configs`) option accepts a file name. The file must be
|
||
|
|
in either the [YAML] or [JSON] format and contain YAML or JSON data that would
|
||
|
|
map to a Python Dictionary in the format required by the
|
||
|
|
[`extension_configs`][ec] keyword of the `markdown.Markdown` class. Therefore,
|
||
|
|
the file `config.yaml` referenced in the above example might look like this:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
myext:
|
||
|
|
option1: 'value1'
|
||
|
|
option2: True
|
||
|
|
```
|
||
|
|
|
||
|
|
Similarly, a JSON configuration file might look like this:
|
||
|
|
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"myext":
|
||
|
|
{
|
||
|
|
"option1": "value1",
|
||
|
|
"option2": "value2"
|
||
|
|
}
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
Note that while the `--extension_configs` option does specify the
|
||
|
|
`myext` extension, you still need to load the extension with the `-x` option,
|
||
|
|
or the configuration for that extension will be ignored. Further, if an
|
||
|
|
extension requires a value that cannot be parsed in JSON (for example a
|
||
|
|
reference to a function), one has to use a YAML configuration file.
|
||
|
|
|
||
|
|
The `--extension_configs` option will only support YAML configuration files if
|
||
|
|
[PyYAML] is installed on your system. JSON should work with no additional
|
||
|
|
dependencies. The format of your configuration file is automatically detected.
|
||
|
|
|
||
|
|
[ec]: reference.md#extension_configs
|
||
|
|
[YAML]: https://yaml.org/
|
||
|
|
[JSON]: https://json.org/
|
||
|
|
[PyYAML]: https://pyyaml.org/
|
||
|
|
[2.5 release notes]: change_log/release-2.5.md
|