Как избежать повторения цикла для действия над тем же файлом? - PullRequest
0 голосов
/ 05 декабря 2018

Python noob в доме (пока):

Я обрабатываю файл построчно, как:

import os

with open ('data.txt','r') as f:
    for line in f:
        os.system("/bin/chmod -x {}".format(line))
        os.system("/usr/bin/clipass {}".format(line))

Основная проблема заключается в том, что chmod может завершиться с ошибкой, если файл не былнайдено, а затем, для меня, оставшаяся вторая команда - пустая трата времени.

Как лучше распределить действие на две части (помимо повторения цикла дважды).Таким образом, я могу запустить chmod для данного списка, а затем выполнить вторую итерацию для выполнения команды сценария оболочки.

1 Ответ

0 голосов
/ 05 декабря 2018

Преамбула:

  • обратите внимание, что os.system устарела и имеет проблемы с безопасностью, особенно в вашем контексте (что, если в одной из строк есть "somefile; rm -rf /*"?).Вы должны использовать subprocess.call
  • для передачи элементов из файла построчно требуется rstrip, или перевод строки находится в команде, и она будет завершаться ошибкой 100% времени ...

Теперь вы можете использовать continue, чтобы пропустить текущий элемент, если код возврата команды не равен 0 (за исключением последней команды, где это не имеет значения):

with open ('data.txt','r') as f:
    for line in f:
        if subprocess.call(["/bin/chmod","-x",line.rstrip()])
           continue
        subprocess.call(["/usr/bin/clipass",line.rstrip()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...