Function to call a extern command as a filter

Terry Reedy tjreedy at udel.edu
Wed Sep 25 15:30:33 EDT 2019


On 9/25/2019 7:27 AM, Rhodri James wrote:
> On 25/09/2019 12:04, Ulrich Goebel wrote:
>> Hello,
>>>> what I want:
>>>> I want a function which converts a markdown-formatted string to a 
>> latex-formatted string
> [snip]
>> I have a extern tool pandoc which does exactly what I want, but it
>> works on files. This tool is able to work as a pipe, so it uses
>> the standard input and standard outpu.

I was not familiar with pandoc, but it seems to be a major m to n (where 
n > m) markup translator. https://pandoc.org/index.html
https://github.com/jgm/pandoc (search 'pandoc github') says "Pandoc is a 
Haskell library for converting from one markup format to another, and a 
command-line tool that uses this library. "
If you were writing in Haskell or if pandoc were written in Python or if 
pandoc were wrapped as a Python library, you could use it as an 
importable library. The third is true, as it is for so many useful 
libraries written in other languages.
https://pypi.org/project/pypandoc/ (https://github.com/bebraw/pypandod) 
(search 'python pandoc') says it can use an existing pandoc installation 
or pandoc included with its Windows and Mac wheels (for pip install).
https://github.com/applecrazy/pyandoc is another wrapping.
One can write custom filters in Python (and other languages).
https://pandoc.org/scripting-1.12.html
https://github.com/jgm/pandocfilters
https://pypi.org/project/pandocfilters/
>> What I could do:
>>>> def markdown_to_latex (m : string)
>>      write the string m to a file
>>      call pandoc to work on that file
>>      read the outputfile into the string l
>>      return (l)
>>>> What would be nice:
>>>> I would like to avoid the extra steps writing an reading extern files.
>> subprocess is your friend here.  Something like:

Short of using pypandoc or pyandoc, this is probably the best thing.
> import subprocess
> def mardown_to_latex(markdown_string):
>   latex = subprocess.run(cmd_string_for_pandoc,
>                          input=markdown_string,
>                          string=True,
>                          capture_output=True)
>   return latex.output
>> The above is completely untested and not in the least bit robust, but 
> that's the area of the standard library you should be looking at.
>
-- 
Terry Jan Reedy


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /