8

Python スクリプトの実行時にスペースを含む引数を読み取るにはどうすればよいですか?

更新

私の問題は、シェルスクリプトを介してpythonスクリプトを呼び出していることです。

これは機能します:

> python script.py firstParam file\ with\ spaces.txt
# or
> python script.py firstParam "file with spaces.txt"

# script.py
import sys
print sys.argv

しかし、スクリプトを実行したときではありません。

myscript.sh:

#!/bin/sh
python $@

出力: ['firstParam', 'file', 'with', 'spaces.txt']

しかし、私が欲しいのは: ['firstParam', 'space.txt を含むファイル']

4

2 に答える 2

11

"$@"代わりに使用してください:

#!/bin/sh
python "$@"

出力:

$ /tmp/test.sh /tmp/test.py firstParam "file with spaces.txt"
['/tmp/test.py', 'firstParam', 'file with spaces.txt']

次のように/tmp/test.py定義されています。

import sys
print sys.argv
于 2012-05-29T14:50:50.810 に答える
5

シェル スクリプトから別のプログラムにパラメータを渡したい場合は、"$@"代わりに$@. これにより、スペースが含まれている場合でも、各パラメーターが 1 つの単語として展開されます。$@は と同等ですが$1 $2 ..."$@"は と同等"$1" "$2" ...です。

たとえば、次を実行すると./myscript param1 "param with spaces":

  • $@- 4 つのパラメーターに拡張されparam1 param with spacesます。
  • "$@"- 2 つのパラメータに拡張され"param1" "param with spaces"ます。
于 2012-05-29T14:50:51.693 に答える