Как получить stderr в Windows/DOS?

Есть как минимум пять вопросов:

  1. При работе с Unicode используйте его везде. os.walk будет возвращать имена файлов Unicode, если передан путь Unicode. from __future__ import unicode_literals будет по умолчанию использовать строки в Unicode.
  2. При открытии файлов закройте их. Вы столкнетесь с проблемами позже при переименовании. result все еще существует и имеет ссылку на последний открытый файл.
  3. Как уже упоминалось в комментарии, используйте os.path.join для root и file для имени до и после.
  4. Используйте os.walk с topdown=False. Сначала будут обработаны конечные узлы, поэтому дерево каталогов не будет повреждено (и сохранится root и dirs действительными) при его обходе.
  5. Сначала переименуйте файлы, затем каталоги, чтобы снова не повредить дерево каталогов при его обходе.

Результат:

from __future__ import unicode_literals

# Skipping unchanged code...

for root, dirs, files in os.walk('./input_folder'):
    for dir in dirs:
        # One way to ensure the file is closed.
        with open(os.path.join(root,dir) + '/ABC ' + str(random.randint(100,999)) + '.dat','w'):
            pass
        with open(os.path.join(root,dir) + '/XYZ-ABC ' + str(random.randint(100,999)) + '.dat','w'):
            pass

#--------------------------------------
# Main rename code

for root, dirs, files in os.walk('./input_folder',topdown=False):
    for file in files:  
        if file.endswith((".dat")):
            # Generate the full file path names.
            filename1 = os.path.join(root,file)
            filename2 = os.path.join(root,file.replace('ABC', '\u2714'))
            os.rename(filename1,filename2)
    for d in dirs:  
        # Generate the full directory path names.
        dirname1 = os.path.join(root,d)
        dirname2 = os.path.join(root,d.replace('ABC', '\u2714'))
        os.rename(dirname1,dirname2)
35
задан Peter Mortensen 9 October 2015 в 19:42
поделиться

2 ответа

Например:

PSKILL NOTEPAD >output.txt 2>&1

Это направит stdout и stderr к имени файла output.txt.

функции See Underused пакетных файлов Windows для получения дополнительной информации.

44
ответ дан Community 27 November 2019 в 07:04
поделиться

Это должно работать в Win32, также.

, Если Вы уже перенаправили stdout и хотите stderr, перенаправленный в тот же файл, необходимо использовать 2> & специальная форма, вместо того, чтобы просто указать тот же файл дважды. Иначе Вы получите "файл занятая" ошибка.

20
ответ дан unwind 27 November 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: