2016-03-02 2 views
0

У меня есть программа python, которая динамически перемещает и переименовывает файлы в кластер hadoop. Обычно файлы варьируются от 10 МБ (разбор) до 1,5 гб (необработанные данные). Для того, чтобы команды перемещения закончили, это может занять некоторое время и из того, что я могу сказать о гонках python через них, и ни одна из команд перемещения не завершится. Каков правильный способ ожидания python для предыдущих команд. Я храню команды в переменной и передаю ее в os.system. Соответствующий код:Сделать Python ждать завершения команд

os.system(moverawfile) 
os.system(renamerawfile) 
os.system(moveparsedfile) 
os.system(renameparsedfile) 

Я знаю, что команды переименования выполняются в основном мгновенно. Я не должен использовать os.system? Как я могу гарантировать, что python будет ждать завершения каждой команды, прежде чем перейти к следующему.

+0

Каков ваш точный код? 'os.system' не возвращается, пока команда не выйдет из выходов. – chepner

+1

Вы должны использовать ['subprocess'] (https://docs.python.org/2/library/subprocess.html) в любом случае. Например, вы можете создать исключение, например, для командной ошибки. – Kupiakos

+0

os.system просто вызывает ['system (3)'] (http://linux.die.net/man/3/system) и ждет завершения команды. – Kevin

ответ

0

Я бы предположил, что вы используете пробег из подпроцесса согласно документации на Python. Он ждет завершения вашей команды перед возвратом.

+0

Некоторые методы в 'subprocess' wait - другие нет. , , – mgilson

+0

Каков правильный синтаксис подпроцесса? – Sam

+0

'os.system' уже ждет; если он ведет себя асинхронно с 'os.system',' subprocess' не будет исправлять это (хотя это вообще хорошая идея). – ShadowRanger

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