Python 导入脚本并执行用户需要的脚本

Python 导入脚本并执行用户需要的脚本,python,function,command-line,import,Python,Function,Command Line,Import,我有三个脚本,它们都是作为一个或几个函数编写的 我还有另外一个脚本导入它们,但当我运行它时,它会运行另外三个脚本(一个接一个) 我可以做些什么来运行这个脚本并执行用户想要的文件,我对python知之甚少(三个脚本是不是花了我很多时间制作的) 提前感谢您如果不看到script1.py、script2.py和script3.py的内容,很难说清楚。我猜每个正在执行的模块中都有顶级代码,您不希望发生这种情况 模块中的代码将在导入时执行。例如,如果script1.py包含以下内容: # script1.

我有三个脚本,它们都是作为一个或几个函数编写的 我还有另外一个脚本导入它们,但当我运行它时,它会运行另外三个脚本(一个接一个)

我可以做些什么来运行这个脚本并执行用户想要的文件,我对python知之甚少(三个脚本是不是花了我很多时间制作的)
提前感谢您

如果不看到script1.py、script2.py和script3.py的内容,很难说清楚。我猜每个正在执行的模块中都有顶级代码,您不希望发生这种情况

模块中的代码将在导入时执行。例如,如果script1.py包含以下内容:

# script1.py
def f():
    print "not called on import"

# following will be executed on first import
print "print was executed"
x = 10
print x * x
导入它将导致以下情况:

>>> import script1
print was executed
100
函数中的代码未执行,但声明函数的语句已执行

您可以通过如下方式检查
\uuuu name\uuuu
变量来防止在导入时执行顶级代码:

# script1.py
def f():
    print "not called on import"

if __name__ == '__main__':
    # following will NOT be executed on first import, only if run directly
    print "print was executed"
    x = 10
    print x * x

>>> import script1
>>> script1.f()
not called on import
但是,如果直接执行
script1.py
,则会显示打印内容:

$ python script1.py
print was executed
100
问题的另一部分是用户如何调用在三个脚本文件中声明的函数??您可以使用
input()
而不是
raw\u input()
,并让用户输入字符串
script1.f()

# main.py
import script1
import script2
import script3

if __name__ == '__main__':
    input("write <module_name>.<name_of_the_function>() : ")

$ python main.py 
write <module_name>.<name_of_the_function>() : script1.f()
not called on import
#main.py
导入脚本1
导入脚本2
导入脚本3
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
输入(“写入:”)
$python main.py
写入。(:script1.f()
不需要进口

如何动态导入python模块并调用其中的函数

使用
importlib.import\u模块()
。例如

import importlib

response = raw_input("Please type module_name function_name: ")
module_name, function_name = response.split()
print "User entered module_name %r, function_name %r" % (module_name, function_name)

try:
    module = importlib.import_module(module_name)
    result = getattr(module, function_name)()
    print "%s.%s() returned %r" % (module_name, function_name, result)
except ImportError, e:
    print "Failed to import module %r" % module
except AttributeError, e:
    print "Function %r not found in module %s" % (function_name, module_name)

这个问题与您的问题相关:您好,我没有顶级代码,这三个脚本包含的函数我只需要编写python+code,它导入+script1(或2或3)这运行用户选择的脚本我尝试了最后一个块,但它仍然一个接一个地运行这三个脚本我真的不清楚你想做什么。运行python脚本文件和导入python模块之间存在差异。您是否试图通过启动一个新的python进程(即子进程)来执行脚本(例如script1.py),还是希望动态导入用户指定的模块(例如script1),然后执行存储在该模块中的一个函数?我希望像问题中的脚本一样执行脚本,用户必须选择哪个脚本(1,2或3)必须执行,我猜这是-动态导入用户指定的模块并执行该模块中的所有功能-抱歉不清楚,无论如何,感谢您的时间我添加了一个“动态导入模块并调用其中一个功能”的答案。如果要执行其所有函数,最好为每个模块创建一个函数,调用模块内的每个函数。也可以使用内省(请参阅inspect模块),但这更难。谢谢,我想这对了解python的人来说是个考验,非常感谢你的回答
import importlib

response = raw_input("Please type module_name function_name: ")
module_name, function_name = response.split()
print "User entered module_name %r, function_name %r" % (module_name, function_name)

try:
    module = importlib.import_module(module_name)
    result = getattr(module, function_name)()
    print "%s.%s() returned %r" % (module_name, function_name, result)
except ImportError, e:
    print "Failed to import module %r" % module
except AttributeError, e:
    print "Function %r not found in module %s" % (function_name, module_name)