【发布时间】:2016-09-16 12:59:21
【问题描述】:
假设我编写了一个脚本 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 不同,我的实际初始脚本非常扩展且混乱。我没有可以执行的单个函数来模拟脚本运行流程。将整个脚本包装在一个函数中感觉不对。
有哪些可能的解决方案?
【问题讨论】:
-
绝对没有充分的理由通过 Popen 从另一个运行 Python 脚本。为什么不能按原样导入?
-
重构
morning使其具有主要功能。 -
@DanielRoseman 假设在
evening脚本中我添加了一行import morning。如何从evening内部获得'Good morning'问候语? -
@DanielRoseman 在导入
morning时会自动打印消息。我没有意识到模块在导入时运行。感觉很笨。 -
@WeatherReport:当心,模块在 first 导入时运行。以下脚本:
print 'First'; import morning ; print "Second" ; import morning只会打印一次Good morning。不确定是否是预期的结果...
标签: python python-module