Python 如何从导入的模块调用函数,然后在返回到原始模块时正确使用文本菜单?

Python 如何从导入的模块调用函数,然后在返回到原始模块时正确使用文本菜单?,python,python-3.x,Python,Python 3.x,因此,我调用选项[1]将我带到createDirectory(),该选项一旦执行其功能,就会将我返回到主菜单()。然后我无法再次调用选项[1],如何获取它以便我可以再次调用选项[1] 文件1: import os from os import makedirs, path import shutil def main_menu(): while True: # loop = 1 # if loop == 1:

因此,我调用选项
[1]
将我带到
createDirectory()
,该选项一旦执行其功能,就会将我返回到
主菜单()
。然后我无法再次调用选项
[1]
,如何获取它以便我可以再次调用选项
[1]

文件1:

import os
from os import makedirs, path
import shutil


def main_menu():
    while True:
            # loop = 1
            # if loop == 1:
                    print("PLEASE CHOOSE AN OPTION BELOW BY ENTERING THE CORRESPONDING NUMBER: \n")

                    print("[1]: CREATE CASE FOLDER STRUCTURE")

                    print("[2]: DELETE X-WAYS CARVING FOLDER")

                    print("[3]: BACK CASE UP TO SERVER")

                    print("[4]: CLOSE PROGRAMME \n")

                    while True:
                        # choice = int(input("ENTER YOUR CHOICE HERE:"))
                            try:
                                    choice = int(input("ENTER YOUR CHOICE HERE:"))
                                    if choice == 1:
                                            # loop = 0
                                            from CreateDirectory import create_directory
                                            # main_menu()
                                            # break



                                    elif choice == 2:
                                            import RemoveFolder
                                            break

                                    elif choice == 3:
                                            caseBackup()
                                            break

                                    elif choice == 4:

                                            break

                                    else:
                                            print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
                                            main_menu()

                            except ValueError:
                                    print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
                                    main_menu()

if __name__ == "__main_menu__":
    main_menu()

main_menu()
文件2:

import os
from os import makedirs, path
import sys
sys.path.append('C:/Users/Matthew/Desktop/HTCU Scripts')

def createDirectory(targetPath):
    if  not path.exists(targetPath):
        makedirs(targetPath)
        print('Created folder ' + targetPath)

    else:
        print('Path ' + targetPath + ' already exists, skipping...')


# MAIN #

print('''Case Folder Initialiser
v 1.1 2015/09/14
A simple Python script for creating the folder structure required for new        cases as follows;

05 DF 1234 15
+--Acquisitions
¦  ---QQ1
¦  ---QQ2
¦  ---...
+--Case File
¦  ---X Ways
¦  +--EnCase
¦  ¦  +--Temp
¦  ¦  +--Index
¦  +--NetClean
+--Export
   ---X Ways Carving

All user inputs are not case sensitive.
''')

driveLetter = input('Enter the drive letter for your WORKING COPY disc:      ').upper()

limaReference = input('Enter the Lima reference number, such as 05 DF 12345 15: ').upper()

rootPath = driveLetter + ':/' + limaReference + '/'

print('You will now enter your exhibit references, such as QQ1. Press enter   at an empty prompt to stop adding further exhibits.')

exhibits = []
while True:
    exhibit = input('Enter exhibit reference: ').upper()
    if not exhibit:
        print('You have finished adding exhibits and the folders will now be created.')
        break

    exhibits.append(exhibit)

for exhibit in exhibits:
    targetPath = rootPath + '/Acquisitions/' + exhibit + '/'
    createDirectory(targetPath)

targetPath = rootPath + 'Case File/X Ways/'
createDirectory(targetPath)

targetPath = rootPath + 'Case File/EnCase/Temp/'
createDirectory(targetPath)

targetPath = rootPath + 'Case File/EnCase/Index/'
createDirectory(targetPath)

targetPath = rootPath + 'Case File/NetClean/'
createDirectory(targetPath)

targetPath = rootPath + 'Export/X Ways Carving/'
createDirectory(targetPath)

print('All folders created, script has terminated.\n')


if __name__ == "__createDirectory__":
    createDirectory(targetPath)

from TestMain import main_menu

您缺少对如何构造和使用模块的基本理解。模块不是“调用”的,而是“导入”的,以便访问该模块内的功能。您的原始帖子不正确地使用了导入语句,而按照惯例,它只应在模块顶部使用一次

顺便说一句,请注意循环引用,因为您不希望模块A导入模块B,然后模块B引用回模块A。这应该是不必要的

因此,您的主模块(在我的示例中名为
main.py
)可能如下所示:

from myDirUtils import create_folder_structure, remove_folder, case_backup

def main_menu():
    finished = False
    while not finished:
        print("PLEASE CHOOSE AN OPTION BELOW BY ENTERING THE CORRESPONDING NUMBER: \n")
        print("[1]: CREATE CASE FOLDER STRUCTURE")
        print("[2]: DELETE X-WAYS CARVING FOLDER")
        print("[3]: BACK CASE UP TO SERVER")
        print("[4]: CLOSE PROGRAMME \n")
        try:
            choice = int(input("ENTER YOUR CHOICE HERE:"))
            if choice == 1:
                create_folder_structure()
            elif choice == 2:
                remove_folder()
            elif choice == 3:
                case_backup()
            elif choice == 4:
                finished = True
            else:
                print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
        except ValueError:
            print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")

if __name__ == "__main__":
    # execute only if run as a script
    main_menu()
第二个模块(名为
myDirUtils.py
并与'main.py'放在同一目录中)定义如下:

from myDirUtils import create_folder_structure, remove_folder, case_backup

def main_menu():
    finished = False
    while not finished:
        print("PLEASE CHOOSE AN OPTION BELOW BY ENTERING THE CORRESPONDING NUMBER: \n")
        print("[1]: CREATE CASE FOLDER STRUCTURE")
        print("[2]: DELETE X-WAYS CARVING FOLDER")
        print("[3]: BACK CASE UP TO SERVER")
        print("[4]: CLOSE PROGRAMME \n")
        try:
            choice = int(input("ENTER YOUR CHOICE HERE:"))
            if choice == 1:
                create_folder_structure()
            elif choice == 2:
                remove_folder()
            elif choice == 3:
                case_backup()
            elif choice == 4:
                finished = True
            else:
                print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
        except ValueError:
            print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")

if __name__ == "__main__":
    # execute only if run as a script
    main_menu()
从操作系统导入makedirs,路径
def create_文件夹_结构():
打印('---您的所有说明--')
driveLetter='D'
limaReference='lima'
rootPath=driveLetter+'://'+limaReference+'/'
#在这里建展品
targetPath=rootPath+'CaseFile/XWays/'
_创建目录(targetPath)
targetPath=rootPath+'CaseFile/Encase/Temp'
_创建目录(targetPath)
def删除文件夹():
打印(“在删除文件夹中…”)
def case_backup():
打印(“以防备份…”)
定义创建目录(targetPath):
打印(“在创建目录中…”)
如果路径不存在(targetPath):
print('现在我们必须创建文件夹')
#makedirs(目标路径)
其他:
打印('路径'+targetPath+'已存在,正在跳过…'))

您对如何构造和使用模块缺乏基本的了解。模块不是“调用”的,而是“导入”的,以便访问该模块内的功能。您的原始帖子不正确地使用了导入语句,而按照惯例,它只应在模块顶部使用一次

顺便说一句,请注意循环引用,因为您不希望模块A导入模块B,然后模块B引用回模块A。这应该是不必要的

因此,您的主模块(在我的示例中名为
main.py
)可能如下所示:

from myDirUtils import create_folder_structure, remove_folder, case_backup

def main_menu():
    finished = False
    while not finished:
        print("PLEASE CHOOSE AN OPTION BELOW BY ENTERING THE CORRESPONDING NUMBER: \n")
        print("[1]: CREATE CASE FOLDER STRUCTURE")
        print("[2]: DELETE X-WAYS CARVING FOLDER")
        print("[3]: BACK CASE UP TO SERVER")
        print("[4]: CLOSE PROGRAMME \n")
        try:
            choice = int(input("ENTER YOUR CHOICE HERE:"))
            if choice == 1:
                create_folder_structure()
            elif choice == 2:
                remove_folder()
            elif choice == 3:
                case_backup()
            elif choice == 4:
                finished = True
            else:
                print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
        except ValueError:
            print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")

if __name__ == "__main__":
    # execute only if run as a script
    main_menu()
第二个模块(名为
myDirUtils.py
并与'main.py'放在同一目录中)定义如下:

from myDirUtils import create_folder_structure, remove_folder, case_backup

def main_menu():
    finished = False
    while not finished:
        print("PLEASE CHOOSE AN OPTION BELOW BY ENTERING THE CORRESPONDING NUMBER: \n")
        print("[1]: CREATE CASE FOLDER STRUCTURE")
        print("[2]: DELETE X-WAYS CARVING FOLDER")
        print("[3]: BACK CASE UP TO SERVER")
        print("[4]: CLOSE PROGRAMME \n")
        try:
            choice = int(input("ENTER YOUR CHOICE HERE:"))
            if choice == 1:
                create_folder_structure()
            elif choice == 2:
                remove_folder()
            elif choice == 3:
                case_backup()
            elif choice == 4:
                finished = True
            else:
                print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")
        except ValueError:
            print("INVALID CHOICE!! PLEASE ENTER A NUMBER BETWEEN 1-3")

if __name__ == "__main__":
    # execute only if run as a script
    main_menu()
从操作系统导入makedirs,路径
def create_文件夹_结构():
打印('---您的所有说明--')
driveLetter='D'
limaReference='lima'
rootPath=driveLetter+'://'+limaReference+'/'
#在这里建展品
targetPath=rootPath+'CaseFile/XWays/'
_创建目录(targetPath)
targetPath=rootPath+'CaseFile/Encase/Temp'
_创建目录(targetPath)
def删除文件夹():
打印(“在删除文件夹中…”)
def case_backup():
打印(“以防备份…”)
定义创建目录(targetPath):
打印(“在创建目录中…”)
如果路径不存在(targetPath):
print('现在我们必须创建文件夹')
#makedirs(目标路径)
其他:
打印('路径'+targetPath+'已存在,正在跳过…'))

您绝对不应该修改您导入的模块中的sys.path。如果不使用此选项,我将如何从文件1调用文件2?我甚至无法回答这个问题。这确实不是您使用导入的方式。我现在已经更改了它,谢谢。您绝对不应该在您导入的模块中修改sys.path。如果不使用此方式,我将如何从文件1调用文件2?我甚至无法开始回答这个问题。这真的不是你使用导入的方式。我现在已经更改了它,谢谢。谢谢这个PeterT-it好建议,实施起来并不困难。谢谢这个PeterT-it好建议,实施起来并不困难。