文字列引数を受け入れるPythonスクリプトがあります。
$ python script.py "one image.jpg" "another image.jpg"
これは期待どおりに機能します。
Python argparse:["one image.jpg", "another image.jpg"]
ファイル名を渡す必要がある場合は、
$ python script.py $(ls "/some/dir/*.jpg")
Python argparse:["one", "image.jpg", "another", "image.jpg"]
-Q
of ls
コマンドを使用すると、結果を二重引用符で囲むことができます。ただし、Pythonスクリプトでは引用符はエスケープされたままです。
$ python script.py $(ls -Q "/some/dir/*.jpg")
Python argparse:['"one image.jpg"', '"another image.jpg"']
引数として使用する適切な文字列にls
ファイル名を展開するにはどうすればよいですか? (私の最初の例のように)
ls
を解析しないでください。ただ使用する:
python script.py /path/to/*.jpg
これは、/path/to/*.jpg
を適切なリストに置き換えるシェルグロビングを実行します。
上記のglobの答えが最適だと思いますが、xargs
とfind
も時々使用できるソリューションです。
find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py
これは、find
の-print0
がスペースではなくヌルバイトで出力を分離し、xargsコマンドラインの-0
が入力がヌルバイトで分離されていると想定するためです。