1. ホーム
  2. python

サブプロセスワイルドカードの使用

2023-11-01 01:47:33

質問

import os

import subprocess

proc = subprocess.Popen(['ls','*.bc'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

out,err = proc.communicate()

print out

このスクリプトは接尾辞が.bcのファイルをすべて表示するはずですが、空のリストを返します。コマンドラインで ls *.bc を手動で実行すると動作します。スクリプトの中で ['ls','test.bc'] を実行しても同様に動作しますが、なぜか星印が動作しません...。何かアイデアはありますか?

どのように解決するのですか?

以下のものを用意する必要があります。 shell=True を指定する必要があります。 しかし、その場合、引数が引用されてしまうので、最初の引数にリストを指定することはできません。代わりに、シェルに渡されたい生のコマンドラインを指定します。

 proc = subprocess.Popen('ls *.bc', shell=True,
                                    stdout=subprocess.PIPE,
                                    stderr=subprocess.PIPE)