2013-11-02 6 views
-3

в порядке, так что я есть pythonscript, который принимает аргумент, как тактекстовый файл каждую строку команды в Баш

& ./myscript.py argumentishere 

, что у хочу сделать, это прочитать текстовый файл, который имеет multipule строк текста и для каждой строки выполнить свою команду, как так

& ./myscript.py line1 
& ./myscript.py line2 
& ./myscript.py line3 
ect.ect.ect 

, как можно достичь этого в Баш скрипт

+0

Использует ли ваш скрипт Python несколько аргументов или ожидает, что вся строка будет единственным аргументом? –

ответ

1

в то время как вы можете добиться этого с Баш скрипт, вероятно, более простой способ заключается в использовании xargs Utili ти.

xargs -L 1 ./myscript.py <inputfile 

Баш путь будет:

while read line 
do 
    ./myscript $line 
done <inputfile 
0

Вы пробовали это?

while IFS= read -r line; do 
    ./myscript.py "$line" 
done < file 
1
#!/bin/bash 

cat input | while read line 
do 
    ./myscript.py $line 
done 

также необходимо добавить #!/usr/bin/env python в голове myscript.py и CHMOD исполняемому properity к myscript.py

+1

О, боже мой, это один из худших способов разобрать файл по строкам в bash. (Еще хуже - использовать 'for'). –

+0

@gniourf_gniourf: Почему так плохо? –

+0

@CharlesBailey Потому что он выполняет цикл while в подоболочке и использует ненужный внешний 'cat'. Способ bash: 'while read; делать ...; сделанный <файл ", как показано в других ответах. (NB. Вопрос _is_ tagged [tag: bash]). –

1

Если бы я тебя, я бы изменить сценарий питона, чтобы взять имя файла как аргумент и делать то, что я хочу с каждой строкой.

import sys 
file = open(sys.argv[1]) 
for line in file: 
    #do your thing here 
Смежные вопросы