Почему я получаю сообщение об ошибке при импорте os.walk в python2.7

Мне нужно рекурсивно искать каталоги/подкаталоги на сервере Linux для каталогов с определенными именами и извлекать файлы в этих конкретных каталогах. Я пробовал 2 подхода: в одном я импортирую os и вызываю os.walk, а в другом я импортирую walk из os. Код ниже:

def getDeployedLibraries():
        serverConfig()
        path = 'somePath'
        deployments = cmo.getLibraries()
        print(divider)
        print("Library Deployments:" )
        print(divider)
        if deployments:
                deployedLibs = []
                stagedLibs = []
                archiveLibs = []
                for dep in deployments:
                        full_name = dep.getName()
                        path = dep.getAbsoluteSourcePath()
                        deployedLibs.append(path+full_name)
                for (dirpath, dirnames, files) in os.walk(path):
                        for name in dirnames:
                                if name != "shared-lib":
                                        dirnames.remove(name)
                        for file in files:
                                stagedLibs.append(file)
                for sLib in stagedLibs:
                        if sLib not in deployedLibs:
                                archiveLibs.append(sLib)
                f = open("filesToArchive.txt","w")
                f.write("\n".join(archiveLibs))
                f.close()
        else:
                deploymentsList.append("No deployments of this type installed.")
        domainConfig()
        return deploymentsList 

Когда я просто импортирую os и вызываю os.walk, я получаю сообщение об ошибке AttributeError: class 'org.python.modules.os' не имеет атрибута 'walk', и когда я импортирую os из os и просто вызываю os, я получаю сообщение об ошибке "ImportError : не могу импортировать имя walk'.

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


person Corey8084    schedule 04.02.2020    source источник
comment
Это не похоже на ошибку Python. Это джавариш. Это Джейтон?   -  person Klaus D.    schedule 04.02.2020
comment
@Клаус Д. Насколько я понимаю, это питон. Я новичок в любом типе кодирования Python, но все форматирование и синтаксис, которые я использовал, выглядят как Python. Я сделал быстрый поиск различий, что заставляет меня поверить, что я просто использую python.   -  person Corey8084    schedule 04.02.2020
comment
У меня были некоторые импорты java, но я попытался удалить их и любой связанный код для тестирования, и это не дало никакого эффекта.   -  person Corey8084    schedule 04.02.2020
comment
Как вы запускаете свой код?   -  person Klaus D.    schedule 04.02.2020
comment
У меня есть программа запуска, которая запускает java -Dweblogic.security.allowCryptoJDefaultPRNG=true -Dweblogic.security.allowCryptoJDefaultJCEVerification=true weblogic.WLST /apps/config/scripts/test/libComparison.py Может ли java-часть этой строки преобразовывать код в Джейтон? Я признаю, что использовал эту строку, потому что кто-то другой использовал ее для своих сценариев.   -  person Corey8084    schedule 04.02.2020
comment
или все это только для wlst и не влияет на то, является ли мой скрипт python или jython?   -  person Corey8084    schedule 04.02.2020


Ответы (1)


Функция должна быть импортирована из os.path:

from os.path import walk
person Emmanuel Collin    schedule 05.02.2020
comment
os.path.walk и os.walk — две разные функции. - person tripleee; 05.02.2020
comment
WLST использует Python 2.2.1, а не 2.7. os.walk может быть недоступен - person Emmanuel Collin; 05.02.2020
comment
Серьезно!? Это с 2002 года! - person tripleee; 05.02.2020
comment
Таким образом, несмотря на то, что я установил 2.7, поскольку я также использую WLST, я могу использовать функции только из 2.2.1? - person Corey8084; 05.02.2020
comment
боюсь да. WLST встраивает собственную версию Python. Проверьте это, выполнив команду sys.version в WLST. - person Emmanuel Collin; 05.02.2020
comment
Я сделал, как указано, и на выходе действительно было 2.2.1. Это расстраивает, но, по крайней мере, теперь я знаю. Спасибо большое за вашу помощь. - person Corey8084; 05.02.2020
comment
я согласен. Это большая проблема с продуктами Oracle. Все продукты FusionMiddleware используют jython 2.2.1. - person Emmanuel Collin; 05.02.2020