Получение параметров из файла через скрипт оболочки в скрипт Python в нужном формате - PullRequest
1 голос
/ 19 июля 2010

У меня есть следующий сценарий оболочки:

#! /bin/sh

while read page_section
  page=${page_section%%\ *}
  section=${page_section#* }     #NOTE: `%* }` is NOT a comment

  wget --quiet --no-proxy www.cs.sun.ac.za/hons/$page -O html.tmp & wait

#  echo ${page_section%%\ *} # verify correct string chopping
#  echo ${page_section#* }   # verify correct string chopping

  ./DokuWikiHtml2Latex.py html.tmp $section & wait
done < inputfile

И такой входной файл:

doku.php?id=ndewet:tools:tramonitor TraMonitor
doku.php?id=ndewet:description Implementation -1
doku.php?id=ndewet:description Research\ Areas -1

Скрипт загружает несколько веб-страниц, указанных в inputfile, и затем должен передать оставшуюся часть строки (например, «Реализация -1» или «Исследования \ Области -1») скрипту python.

Теперь немного. Когда третья строка этого примера файла обрабатывается, он передает «Research \ Areas» скрипту python как два отдельных аргумента, что подтверждается:

>>> print sys.argv
['./DokuWikiHtml2Latex.py', 'html.tmp', 'Research', 'Areas', '-1']

Как я могу получить раздел из нескольких слов, например "Области исследований", из входного файла в один аргумент для сценария python? Я пытался убежать от '\', а также делал

./DokuWikiHtml2Latex.py html.tmp `echo ${section#* }`

между прочим, но безрезультатно.

Число в конце строки ввода является другим аргументом, но необязательным.

Ответы [ 3 ]

2 голосов
/ 19 июля 2010

Поместите кавычки вокруг $ section:

./DokuWikiHtml2Latex.py html.tmp "$section" & wait
1 голос
/ 19 июля 2010

Просто позвольте read выполнить анализ:

while read page section rest
do
    echo "Page: $page"
    echo "Section: $section"
done < inputfile

Для элегантной обработки необязательного аргумента используйте массив:

while read -a fields
do
    wget --quiet --no-proxy "www.cs.sun.ac.za/hons/${fields[0]}" -O html.tmp
    unset "fields[0]"
    ./DokuWikiHtml2Latex.py html.tmp "${fields[@]}"
done < inputfile

Всегда указывайте свои переменные!

0 голосов
/ 19 июля 2010

Обычно аргументы, состоящие из нескольких слов, можно передать как один, используя кавычки, поэтому:

doku.php?id=ndewet:description "Research Areas" -1
...