Python の subprocess.run()
の「使い方」と「コード例」を書きました。
- 使い方
- コード例
- MeCab 用辞書の作成する (MeCab, mecab-dict-index.exe)
- MeCab で形態素解析する (MeCab, mecab.exe)
- 画像の破損をチェックする (ImageMagick, identify.exe)
- PDF からテキストを抽出する (Xpdf, pdftotext.exe)
- PDF の破損をチェックする (QPDF, qpdf.exe)
- 7-Zip でファイルやフォルダを圧縮する (7-Zip, 7z.exe)
- PNG を減色して軽くする (pngquant.exe)
- chm を html に変換する (hh.exe)
- タイムスタンプを変更する (PowerShell)
- 続行するには何かキーを押してください (PAUSE)
- 実行時のフォルダ指定する (cwd)
- 並列処理
使い方
subprocess.run()
の使い方です。
『実行ファイル (.exe) のフルパス』と『引数』を『タプル (tuple)』に入れて、subprocess.run()
に渡すと実行できました。
タプルの代わりに『リスト (list)』を使用しても OK でした。
Windows の場合ですが、基本的に『環境変数にパスを追加しておく』といった作業は『不要』でした。
単純に、実行ファイル (.exe) のフルパスを指定してあげれば、実行することができました。
subprocess.run()
の速さについてです。
タスクマネージャーを見ていたら、subprocess.run()
を実行するたびに、子プロセスが生成と消滅を繰り返していました。
ですが、別に遅いということはなくて、実用的な速さで動きました。
たとえば『Python の for 文で subprocess.run()
を 100 万回実行する』といった処理もよくしていますが、コマンドの速さが問題になったことはないです。
『1つの子プロセスを使いまわす方法は無いのか?』
実行ファイル (.exe) の作りによっては可能でした。
subprocess.Popen()
を使用して、標準入力と標準出力を駆使することで、1つの子プロセスを使いまわすことができました。
できましたが、それはなかなか難しくて、大変でした。
なので、通常は subprocess.run()
を使用するのが良かったです。
コード例
MeCab 用辞書の作成する (MeCab, mecab-dict-index.exe)
CSV ファイルから MeCab 用の辞書ファイル (.dic) を作るコード例です。
⇒ 【Windows】MeCab で NEologd の辞書を作ってインストールする方法【Python】
MeCab で形態素解析する (MeCab, mecab.exe)
MeCab で日本語のテキストを形態素解析するコード例です。
⇒ 【Windows】MeCab で形態素解析する Python コード例【NEologd】
⇒ 【Windows】MeCab で形態素解析する Python コード例(出力フォーマット指定)【NEologd】
⇒ 【Windows】MeCab で『分かち書き』する Python コード例【NEologd】
画像の破損をチェックする (ImageMagick, identify.exe)
ImageMagick で画像ファイル(JPEG、PNG、GIF など)の破損をチェックするコード例です。
ImageMagick の中の identify.exe を使用します。
⇒ 【Python】画像の破損をチェックするコード例【ImageMagick】
PDF からテキストを抽出する (Xpdf, pdftotext.exe)
Xpdf で PDF からテキストを抽出するコード例です。
Xpdf command line tools の中の pdftotext.exe を使用します。
⇒ 【Python】PDF からテキストを抽出するコード例【pdftotext.exe】
PDF の破損をチェックする (QPDF, qpdf.exe)
QPDF で PDF の破損をチェックするコード例です。
QPDF の qpdf.exe を使用します。
⇒ 【Python】PDF の破損をチェックするコード例【QPDF】
7-Zip でファイルやフォルダを圧縮する (7-Zip, 7z.exe)
7-Zip でファイルやフォルダを圧縮するコード例です。
7-Zip の中の 7z.exe を使用します。
⇒ Python から 7-Zip を呼び出して zip 圧縮するコード例【subprocess】
PNG を減色して軽くする (pngquant.exe)
pngquant で PNG を減色するコード例です。
pngquant の中の pngquant.exe を使用します。
⇒ 【Python】PNG を減色して圧縮するコード例(標準入力と標準出力)【pngquant】
⇒ 【Python】PNG を減色して圧縮するコード例(画像ファイル)【pngquant】
chm を html に変換する (hh.exe)
『コンパイルされた HTML ヘルプ ファイル (.chm)』を『普通のHTML ファイル (.html)』に変換するコード例です。
Windows 10 の "C:\Windows\hh.exe"
を使用します。
⇒ Python で encoding の一覧を取得する方法とコード例(標準エンコーディングの表から一覧を取得)
タイムスタンプを変更する (PowerShell)
PowerShell でファイルやフォルダのタイムスタンプを変更するコード例です。
PowerShell を subprocess.run()
から呼び出して使用します。
⇒ 【Python】PowerShell でファイルとフォルダのタイムスタンプを変更するコード例
続行するには何かキーを押してください (PAUSE)
PAUSE コマンドを使用して、コマンドラインプログラムを一時停止するコード例です。
PAUSE コマンド を subprocess.run()
から呼び出して一時停止します。
⇒ 【Python】『続行するには何かキーを押してください』を表示する方法
実行時のフォルダ指定する (cwd)
subprocess.run()
でコマンドを実行するときに、実行時のフォルダを指定するコード例です。
⇒ 【Python】subprocess の run や Popen で実行時のフォルダを指定する方法 ⇒ 引数 cwd を使う
並列処理
subprocess.run()
で外部プログラムを (.exe) を実行するときは、Python の並列処理(マルチプロセス処理)で高速化することができました。
⇒ 【Python】multiprocessing.Pool() の使い方【並列処理】
⇒ 【Python】concurrent.futures の使い方【並列処理】
以上です。