2010-07-19 6 views
1

je le script shell suivant:paramètres d'un fichier Obtenir via le script shell en script python dans le format

#! /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 

et un fichier d'entrée comme celui-ci:

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

Le script télécharge un nombre de pages Web spesified dans inputfile et doit ensuite passer le reste de la ligne (par exemple "Implementation -1" ou "Research \ Areas -1") au script python.

Maintenant pour le bit collant. Lorsque la troisième ligne de ce fichier exemple est traité passe « Recherche \ zones » au script python comme deux arguments distincts, comme le confirme:

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

Comment puis-je obtenir une section de mots multiples, comme « Domaines de recherche "du fichier d'entrée dans un seul argument pour le script python? J'ai essayé d'échapper le '\', et aussi faire

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

entre autres choses, mais en vain.

Le numéro à la fin d'une ligne d'entrée est un autre argument, mais facultatif.

Répondre

1

Faites-read faire les choses de l'analyse syntaxique:

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

Pour manipuler l'argument optionnel avec élégance, utilisez un tableau:

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 

toujours citer vos variables!

+0

Vous devez mettre des guillemets autour des éléments du tableau que vous unset à protéger contre la globalisation de fichier: champs "unset" [0] "' (dans le cas où il y a un fichier nommé "fields0"). Démonstration: 'test = (1 2 3); toucher test0; test non mis à jour [0]; déclarer -p test; "test" [0] "désactivé"; déclarer -p test' –

+0

@Dennis Williamson: Merci. – Philipp

+0

De rien. J'ai oublié de démontrer qu'une variable nommée 'test0', si elle existait, ne serait pas mise à jour à cause de la globalisation et de la présence du fichier:' test = (1 2 3); test0 = 4; toucher test0; test non mis à jour [0]; echo "test0 = $ test0"; déclarer -p test; "test" [0] "désactivé"; déclarer -p test' –

0

Normalement arguments à plusieurs mots peuvent être passés comme un en utilisant des guillemets, donc:

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

Mettez des guillemets autour de $ section:

./DokuWikiHtml2Latex.py html.tmp "$section" & wait 
Questions connexes