6

を使用して python から pandoc を呼び出す際に問題が発生してsubprocess.Popenいます。すべてコンソールで動作します。これがコードです。

# Test markdown file
here is just a simple markdown file.

これを使用する私のpythonコードfilenameは、私のマークダウンファイルのフルパスです:

import subprocess
fileout = os.path.splitext(filename)[0] + ".pdf"
args = ['pandoc', filename, '-o', fileout]
subprocess.Popen(args)

また、エラーをキャプチャするさまざまな方法を試しましたが、うまくいきませんでした。ただし、コンソールでは、すべてが正常に実行されています。

pandoc '[filename]' -o '[fileout]'
4

4 に答える 4

5

これはあなたの質問に答えません(そして、subprocess.Popenを使用してpandocを呼び出す必要があるかもしれません)が、Pyandocと呼ばれるPandoc用のPythonラッパーがあります:ここで私の答えを参照してください。

于 2012-12-04T16:29:43.847 に答える
3

それは問題なく動作するはずですが、直接subprocess.check_callではなく、使用が完了するまで待つことをお勧めします。subprocess.Popen

subprocess.check_call(args)

これにより、正常に完了したことも確認できます。ステータス コードが 0 でない場合、例外がスローされます。

于 2012-09-29T04:41:45.260 に答える
3

の使用はあまり好きではありません。PIPEより複雑であり、Python のドキュメントでは、subprocess必要がなければ使用しないことを推奨しています (セクション 17.1.1を参照)。

これは私にとってはうまくいきます(Markxから取得)。

Filename は.md、目的の出力 ( .pdf.docx)の , および拡張子を除いたマークダウン ファイルの名前です。

def pandoc(filename, extension):
    # TODO manage pandoc errors, for example exit status 43 when citations include Snigowski et al. 2000
    options = ['pandoc', filename + '.md', '-o', filename + extension]
    options += ['--ascii', '-s', '--toc'] # some extra options
    options += ['--variable=geometry:' + 'a4paper'] # to override the default letter size
    print(options)  # for debugging
    return subprocess.check_call(options)

問題が発生した場合は、例外が発生します。例外ではなくステータスコードを取得したい場合は、 に置き換える必要があると思いますがcheck_callドキュメントcallを参照してください。

引用を使用したい場合は、Markxプロジェクトのオリジナルの実装をbibliographyオプション付きで参照してください。

于 2012-12-25T07:00:11.233 に答える
1

Popen 呼び出しの結果の stdout と stderr を取得したい場合は、communicate() と組み合わせて PIPE を使用する必要があります。

from subprocess import Popen, PIPE

fileout = os.path.splitext(filename)[0] + ".pdf"
args = ['pandoc', filename, '-o', fileout]
stdout, stderr = Popen(args, stdout=PIPE, stderr=PIPE).communicate()
于 2012-09-29T05:39:16.723 に答える