7

Python のドキュメントによると、subprocess.callブロックして、サブプロセスが完了するまで待機する必要があります。このコードでは、コマンド ラインxlsで呼び出して、いくつかのファイルを新しい形式に変換しようとしています。Libreofficeサブプロセス呼び出しの呼び出しがブロックされていると想定しましたが、各呼び出しの後に人為的な遅延を追加する必要があるようです。そうしないと、outディレクトリ内のファイルがほとんど失われます。

私は何を間違っていますか?なぜ遅延が必要なのですか?

from subprocess import call

for i in range(0,len(sorted_files)):
            args = ['libreoffice', '-headless', '-convert-to',
                    'xls', "%s/%s.xls" %(sorted_files[i]['filename'],sorted_files[i]['filename']), '-outdir', 'out']
            call(args)
            var = raw_input("Enter something: ") # if comment this line I dont get all the files in out directory

EDIT以下のコメントから答えを見つけるのは難しいかもしれません。私unoconvは、ブロッキングでスクリプトからの操作が簡単なドキュメント変換に使用しました。

4

3 に答える 3

0

@mgilson で言及されているように、libreoffice が仲介者 (デーモン) を使用している場合、1 つの解決策は、呼び出しているプログラムを見つけて、自分で直接呼び出すことです。

于 2013-04-29T18:51:24.013 に答える