2012-04-30 3 views
0

У меня есть странная проблема с bash/optparse. Мне нужно передать строку в мой скрипт python, когда строка определена.OptParse, пробелы и bash

Я использую следующий код:

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

и здесь есть питон скрипт:

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/" 

Однако когда Я запускаю скрипт 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/my и project/". Если вы хотите передать результат выполнения команды как одного параметра вы должны использовать синтаксические кавычки код:

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

фиксированной Кроме кавычку - Если вы используете Bash настоятельно рекомендуется использовать $() , Обратите внимание, что quoting context является различными внутри и вне подстановки команды, поэтому нет опасности внешних кавычек, влияющих на внутренние кавычки.

Смежные вопросы