Как я могу отложить выполнение до окончания os.system? - PullRequest
0 голосов
/ 29 января 2011

Я использую os.system для копирования файла из системы в другую. Логика очень простой программы заключается в выполнении другого набора команд после копирования этого файла.

Проблема в том, что os.system на самом деле не ожидает копирования файла и переходит к выполнению следующей строки. Это вызывает проблемы в системе. Я мог бы на самом деле дать некоторые функции ожидания через time.sleep(), но мы должны копировать файлы с размерами от 500 МБ, иногда до 20 ГБ, и время, затраченное на это, очень отличается.

Какое решение? Мне нужно как-то сообщить моей программе, что файлы скопированы, а затем выполнить следующую строку.

Ответы [ 3 ]

6 голосов
/ 29 января 2011

Первое, что я попробую, это использовать shutil.copyfile() вместо внешней программы для копирования файла. Если вам нужно использовать внешнюю программу, вы должны вызывать ее через subprocess.Popen(), а не через os.system(). Вы можете использовать Popen.wait(), чтобы дождаться завершения подпроцесса.

1 голос
/ 29 января 2011

используйте для копирования файлов модуль shutil .

Модуль shutil предлагает ряд операции высокого уровня над файлами и коллекции файлов. Особенно, функции, которые поддерживают копирование и удаление файлов.

также используйте модуль подпроцесс вместо os.system ()

Модуль подпроцесса позволяет вам порождают новые процессы, подключаются к их каналы ввода / вывода / ошибки и получения их коды возврата. Этот модуль намерен заменить несколько других, старые модули и функции, такие как:

os.system

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

1 голос
/ 29 января 2011

Я думаю, вам лучше использовать shutil.copyfile , чем os.system, чтобы скопировать файл.

(Edit: woops, copy, not move)

...