2016-07-12 3 views
0

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

Я открываю два терминальных окна и cd один из них (назовем его терминалом A) в каталог программы (так что я могу запустить его), а другой (терминал B) в каталог, где выходные файлы записываются (этот выходной каталог запускается пустым). Когда я touch файл в выходном каталоге от терминала A, затем ls в терминале B, появляется новый файл - все это ведет себя нормально.

Однако, после того, как я запустить программу в терминале А, ни один из новых файлов не отображаются, когда я делаю ls в терминале B. Как ни странно, если я cd .затемls в терминал В, новые файлы теперь получить в списке.

Что вызывает подобное поведение, и могу ли я обойти его?

Редактировать: Информация о том, что пишет файлы.

  • Некоторые из них записываются по звонкам в cv2.imwrite(...) в Python 2 с использованием OpenCV.
  • Некоторые из них написаны ofstream на C++.
+0

Не могли бы вы включить [mcve] (ваш код)? Мы можем только догадываться, не имея трудных фактов. –

+0

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

+1

Тогда мы не сможем воспроизвести эту * ошибку *, которая является причиной закрытия. Можете ли вы хотя бы перечислить соответствующие команды, используемые в скрипте? –

ответ

2

Эта последовательность событий, похоже, воспроизводит проблему.

image

Ваша программа в терминале А, вероятно, удаляет текущий каталог терминал B, а затем воссоздает его с тем же именем, так ls не работает с той конкретной директории, которая была первоначально cd «D к терминальным B Безразлично Больше не существует. Тем не менее, cd . приводит вас к (теперь) воссозданному каталогу, после чего снова работает ls.

+0

Похоже, это именно то, что происходит - спасибо! – vijrox

2

Это произойдет, если ваш второй каталог удаляется и воссоздается. Даже если каталог удален, но какой-то процесс имеет его как текущий каталог, файловый дескриптор для него останется открытым, а ls покажет старый контент. Выполнение cd . заставит закрыть дескриптор на данный момент несуществующий каталог и снова открыть его, теперь показывая новый контент.