COM
Python 2.7 から MS Excel を駆動するために統合を使用しています。次のコードを実行すると、奇妙なことに気付きました。
import win32com.client
excelApp = win32com.client.dynamic.Dispatch('Excel.Application')
プロセスがEXCEL.EXE
プロセス リスト (Windows タスク マネージャーまたは を使用して表示subprocess.Popen('tasklist')
) に期待どおりに表示されます。次に、問題なく実行するために必要なすべてのことを行います。ただし、Excel を閉じると、次のようになります。
excelApp.Application.Quit()
プロセスを開始した Python インタープリターを閉じても、プロセスは持続します (この種のことは、Excel が別のプロセスで実行されるため理にかなっていますが、念のため)。このプロセスを終了する唯一の方法は、タスク マネージャーを使用して手動で行うか、次のように呼び出すことです。
subprocess.Popen("taskkill /F /im EXCEL.EXE",shell=True)
forceful/F
フラグが必要です。そうしないと、プロセスは終了しません。
これは実際には問題ではありませんが (私は願っています)、最初にドキュメントを「通常どおり」編集し、次に Python から Excel を呼び出してからもう一度「通常どおり」に編集したときに、これが問題を引き起こす可能性があるかどうかを尋ねたかったのですか? 潜在的に何回も(数十回)連続して?私が心配しているのは、競合するバージョンのドキュメントなどを作成することです。または、EXCEL.EXE
安全のために毎回プロセスを終了する必要がありますか?
また、それsubprocess.Popen("taskkill")
が例外を返さないことにも気付きcatch
ました。「存在しないプロセス」の強制終了の試みと、プロセスを終了しようとして失敗した試みを区別することに特に関心があります。