pythonおよびargparseを使用すると、ユーザーは-dをフラグとしてファイル名を入力できます。
parser.add_argument("-d", "--dmp", default=None)
ただし、パスにスペースが含まれている場合、これは失敗しました。例えば。
-d C:\SMTHNG\Name with spaces\MORE\file.csv
注:スペースを入力するとエラーが発生します(フラグは 'C:SMTHNG\Name'のみを入力として受け取ります)。
error: unrecognized arguments: with spaces\MORE\file.csv
この問題の解決策を見つけるのに必要な時間より長くかかった...(Q&Aが見つからなかったので、自分で投稿しています)
簡単な解決策:argparseは、スペースで埋められた文字列が引用符でカプセル化されている場合、単一の引数と見なします。
この入力は機能し、問題を「解決」しました。
-d "C:\SMTHNG\Name with spaces\MORE\file.csv"
注意:引数の周りには ""があります。
引数を解析できず、「エラー:認識できない引数:」が引き続き表示される人のために、回避策を見つけました:
parser.add_argument('-d', '--dmp', nargs='+', ...)
opts = parser.parse_args()
そしてそれを使いたいときは
' '.join(opts.dmp)
今日もこの問題にぶつかった。
-d "foo bar"
助けにはならなかった。等号を追加する必要がありました
-d="foo bar"
そしてそれはうまくいきました。
いくつかの実験(python 2.7 Win10)の後、ゴールデンルールはスペースを含む引数を引用符( "")で囲み、[〜#〜] not [〜#〜] put if引数にスペースはありません。文字列/パスを渡す場合でも。また、少なくともWindowsでは、単一引用符( '')を付けることはお勧めできません。
小さな例:python script.py --path ....\Some_Folder\--string "ここに文字列が入ります"