Python - 意外的导入行为

时间:2016-02-28 18:14:23

标签: python python-2.7 import

我有一个名为Utility.py的文件,它是调用一组工具的必备菜单。

在该文件夹中有一个core_fuctions文件夹,其中包含一个名为powershell_tools的嵌套文件夹。powershell_tools内有一个名为test_tools.py的文件,它是PowerShell工具的菜单。

每个文件夹中都有__init__.py。当我调用我的实用程序时,它会立即打开test_tools.py文件而不是utility.py菜单。我有一个退出选项,它退出到Utility.py菜单。我不确定为什么它会从它开始的地方开始。

以下是实用程序文件的缩写版本:

from core_functions.powershell_tools import test_tools
import os

os.system("cls")
while True:
    print "\n"
    print "Select operation."
    print ....
    print "Press 4 to Use Powershell Tools"
    print "Press 5 to Exit"
    print "\n"

choice = raw_input("Enter your choice: ")

if choice == "1":
    verbose = raw_input("\nWould you like to run in verbose mode? (yes) or no: ")
    if verbose == "no":
        print "hi"
    else:
        print "yup"

elif choice == "4":
    test_tools()

elif choice == "5":
    os.system("cls")
    break

else:
    os.system("cls")
    print "\nPlease enter a valid operation."
    continue

这就是当我启动utility.py时我希望删除的菜单。但是,当我启动Utility.py

时,我在test_tools.py文件中被删除了

test_tools.py看起来像这样:

from tools.ps_cli import *
from tools.remote_ps_session import *
from tools.ps_clear_remote_dns_cache import *
from tools.ps_get_remote_system_local_users import *
from tools.ps_md5_hash import *
from tools.ps_remote_system_uptime import *
from tools.ps_unlock_account import *

while True:
    print "\n"
    print "Select operation."
    print "Press 1 to test ps_cli.py"
    print "Press 2 to test remote_ps_session.py"
    print "Press 3 to test ps_clear_dns_cache.py"
    print "Press 4 to test ps_get_remote_system_local_users"
    print "Press 5 to test ps_md5_hash"
    print "Press 6 to test ps_remote_system_uptime"
    print "Press 7 to test ps_unlock_account"
    print "Press 'a' to exit"


    choice = raw_input("Enter your choice: ")

    if choice == "1":
        ps_cli()
    elif choice == "2":
        remote_ps_session()
    elif choice == "3":
        ps_clear_remote_dns_cache()
    elif choice == "4":
        ps_get_remote_system_local_users()
    elif choice == "5":
        ps_md5_hash()
    elif choice == "6":
        ps_remote_system_uptime()
    elif choice == "7":
        ps_unlock_account()
    elif choice == "a":
        break


    else:
        os.system("cls")
        print "\n\n\nPlease enter a valid operation."
        continue

我无法弄清楚为什么导入导致它启动test_tools并且当我在utility.py中按4时不启动

以下是一些行为截图:

启动Utility.py

enter image description here

按'a'退出(这是事情应该开始的地方):

enter image description here

尝试按4:

返回test_tools.py

enter image description here

所以TL; DR就是这个。为什么我的程序直接启动到导入的模块,为什么离开后不能返回它?我绝对是Python的新手,但以前没有使用过导入这个问题 - 尽管它们还没有在多个嵌套目录中。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

test_tools是一个不可调用的模块。它会在您import时运行,而不是在test_tools()时运行。

如果要通过调用函数来运行该模块中的代码,则需要将该代码移动到函数中。例如:

在实用程序中:

elif choice == "4":
    test_tools.run()
. . . 

在test_tools中:

def run():
    while True:
        print "\n"
        print "Select operation."
        print "Press 1 to test ps_cli.py"
        print "Press 2 to test remote_ps_session.py"
        print "Press 3 to test ps_clear_dns_cache.py"
        print "Press 4 to test ps_get_remote_system_local_users"
        print "Press 5 to test ps_md5_hash"
        print "Press 6 to test ps_remote_system_uptime"
        print "Press 7 to test ps_unlock_account"
        print "Press 'a' to exit"
. . .