2012-04-30 10 views
0

私はbash/optparseに奇妙な問題があります。私は文字列が定義されているときに私のpythonスクリプトに文字列を渡す必要があります。OptParse、空白、bash

私は次のコードを使用

:私は、bashの式をテストするとき、それが働いているように見える

def main(): 
    parser = OptionParser() 
    parser.add_option("-u", dest="url") 
    opts, args = parser.parse_args() 
    print opts.url 

[email protected]:~$ URL="http://lol.com/my project/" 
[email protected]:~$ echo `if [ -n "$URL" ]; then echo -u \"$URL\"; fi` 
-u "http://lol.com/my project/" 

しかしとき

./lol.py `if [ -n "$URL" ]; then echo -u \"$URL\"; fi` 

、ここではPythonスクリプトです私は引数付きのPythonスクリプトを実行します

[email protected]:~$ ./lol.py `if [ -n "$URL" ]; then echo -u "$URL"; fi` 
http://lol.com/my 

空白の後の文字列の一部を切り捨てます。

どうしてそれが起こっているのか、どうやって動作させるのか説明できますか?

+1

Pythonのバージョンが2.7以上であれば、 'argparse'モジュールの使用をお勧めします。 optparseモジュールの使用は推奨されていません(http://docs.python.org/library/optparse.html) – sateesh

答えて

2

これは、スクリプトに送信する引用符が、ではなく、の構文ではないためです。つまり、lol.pyは、"http://lol.com/myproject/"というパラメータを受け取ります。あなたは単一のパラメータとしてコマンドの結果を渡したい場合は、コードの前後に構文引用符を使用する必要があります。

./lol.py "$(if [ -n "$URL" ]; then echo -u "$URL"; fi)" 

はまた、バッククォートを固定 - あなたはバッシュを使用している場合、非常に $()を使用することをお勧めします。 quoting contextとは異なり、がコマンド置換の内側と外側にあるため、外側の引用符が内側の引用符に影響することはありません。