2011-02-02 9 views
6

私はいくつかの操作を実行するためにアプリケーションpdftkを数回使っているPythonスクリプトをコーディングしています。例えばPython:os.system()を使用してファイルを開くことができません

、私はこのような2種類のPDFファイルをマージするには、Windowsのコマンドラインシェルでpdftkを使用することができます。

pdftk 1.pdf 2.pdf cat output result.pdf 

私はPythonスクリプトの途中で上記の操作を実行したいと思います。ここで私はそれをやってみました:

os.system('pdftk 1.pdf 2.pdf cat output result.pdf') 

上記のpdftkコマンドは、Windowsシェルで完全に動作します。しかし、Pythonのos.system()を使って入力ファイルを実行しようとすると、入力ファイル(1.pdfと2.pdf)を開くことができません。

Error: Failed to open PDF file: 1.pdf

Error: Failed to open PDF file: 2.pdf

なぜそれが起こるん:ここではPythonのos.system()を使用してコマンドを実行しようとしたとき、私はpdftkから取得エラーメッセージがですか?どうすれば修正できますか?

注:私は、PDFファイルをPythonとマージするためのより良い方法があることを知っています。私の質問は、PDFファイルをマージすることではありません。それは単なるおもちゃの例だった。私が達成しようとしているのは、Pythonを使ってpdftkや他のコマンドラインアプリケーションを実行する能力です。

+4

ほとんどの場合、ディレクトリパスに問題があります。あなたは 'C:\ 'またはどこからでも完全なパスを渡すことができます。あるいは、正しいディレクトリで開始していることを確認することもできます。 – chmullig

+0

引用やシェルの変数補間の問題でもあります。このような問題を回避するには、 'os.system'の代わりに常に' subprocess'モジュールを使用してください。 – Philipp

+3

@chmullig:あなたは本当に私はその愚かなことですか?まあ、私は分かります。問題は確かに経路の問題でした。質問に対する答えであなたが言ったことを繰り返し、私はそれを受け入れます。ありがとう。 – snakile

答えて

3

あなたはsubprocessと、そうで脱出、引用、およびとの(潜在的な)問題を回避することができます

import subprocess 

subprocess.call(['pdftk', '1.pdf', '2.pdf', 'cat', 'output', 'result.pdf']) 

それはとして使用するのも簡単ですos.systemであり、さらに引数リストを動的に構築する方が簡単です。

2

プロセスの現在の作業ディレクトリを設定する必要があります。 .pdfファイルが/some/path/to/pdf/files/に位置している場合:

>>> os.getcwd() 
'/home/vz0' 
>>> os.chdir('/some/path/to/pdf/files/') 
関連する問題