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


11

文字列引数を受け入れる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"]

-Qof lsコマンドを使用すると、二重引用符で結果を囲むことができます。ただし、引用符はPythonスクリプトでエスケープされたままです。

$ python script.py $(ls -Q "/some/dir/*.jpg")

Python argparse: ['"one image.jpg"', '"another image.jpg"']


ls引数として使用するには、ファイル名を適切な文字列に拡張する方法を教えてください。(私の最初の例のように)


シェル展開を引用する必要があります"$(ls -Q '/some/dir/*.jpg')"。しかし、回答で述べられているように、より良い代替案があります。
Bakuriu

回答:


23

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

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

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


5

私は上記のグロブ答えは最高だと思いますが、xargsfindにも時々利用できるソリューションです。

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

これは、-print0on findでは出力がスペースではなくnullバイトで区切ら-0れ、xargsコマンドラインでは入力がnullバイトで区切られていると想定されるためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.