将python脚本转换为函数

时间:2016-05-19 14:46:22

标签: python python-module

假设我编写了一个脚本morning.py,它执行简单的打印声明

# morning.py
print 'Good morning'

几个小时后,我意识到我必须在另一个名为evening.py的脚本中使用此脚本。我知道有两种选择。首先,调用morning.py作为子进程

# evening.py
import subprocess
import shlex
process = subprocess.Popen(shlex.split('python morning.py'))
process.communicate()

这是我最初选择的方式。问题是我想将我的程序(morning + evening)打包成一个可执行文件。根据我的理解,从exe文件这样的调用刚刚起作用。

另一种选择是将模块morning转换为函数。例如,像那样

# morning.py
def morning_func():
   print 'Good morning'

然后我可以简单地从evening模块

中调用此函数
# evening
import morning
morning.morning_func()

这里的问题是,与morning不同,我的实际初始脚本非常扩展和混乱。我没有单一的功能来模拟脚本运行流程。将整个脚本包装在函数中只是感觉不对。

有哪些可行的解决方案?

3 个答案:

答案 0 :(得分:2)

常见的用法是始终在模块中声明可以由其他模块使用的函数(和/或类),并在最后添加if __name__ == '__main__':测试,以便在直接调用脚本时直接执行某些操作

在你的例子中,它会给出:

# morning.py
def morning_func():
   print 'Good morning'

if __name__ == '__main__':
    morning_func():

这样,您可以简单地将其作为python morning.py执行,或将其包含在其他Python文件中,以便从那里调用morning_func

答案 1 :(得分:0)

除了上述答案外,这种情况下的最佳方法是逐行阅读原始的早上脚本并将动作包装在相关功能中。请在How to convert a Python script to module上参考此食谱。

答案 2 :(得分:0)

正如您所说的那样叫早晨凌乱,我建议像这样导入早晨:

# main.py
from morning import morning_func as morning

然后您可以像这样致电早上:

morning()

如果您想单独运行morning.py,如@Serge Ballesta所说,请像这样修改morning.py

# morning.py
def morning_func():
   print 'Good morning'

if __name__ == '__main__':
    morning_func()