web-dev-qa-db-ja.com

引数としてスペースを含むファイル名を渡すにはどうすればよいですか?

文字列引数を受け入れる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ファイル名を展開するにはどうすればよいですか? (私の最初の例のように)

11
autorun

lsを解析しないでください。ただ使用する:

python script.py /path/to/*.jpg

これは、/path/to/*.jpgを適切なリストに置き換えるシェルグロビングを実行します。

23
DopeGhoti

上記のglobの答えが最適だと思いますが、xargsfindも時々使用できるソリューションです。

find /some/dir/ -name '*.jpg' -print0 | xargs -0 python script.py

これは、find-print0がスペースではなくヌルバイトで出力を分離し、xargsコマンドラインの-0が入力がヌルバイトで分離されていると想定するためです。

5
davidsheldon