从Linux

时间:2017-10-04 18:27:48

标签: python linux

我使用的是python 2.7和ubuntu 16.04。

我在python上有一个简单的REST服务器: module1 中的文件 server_run.py ,它从 module2 导入一些脚本。 现在我正在编写集成测试,它正在向我的服务器发送POST请求并验证我的服务器已采取必要的操作。显然,服务器应该启动并运行但我不想手动执行,我想从我的测试启动我的服务器(server_run.py也有主要方法): server_run_test.py module3 中的文件。

所以,任务听起来很简单:我需要从另一个开始一个python脚本,但我花了差不多一整天。我在这里找到了几个解决方案,包括:

script_path = "[PATH_TO_MODULE1]/server_run.py"
subprocess.Popen(['python', script_path], cwd=os.path.dirname(script_path))

但我的服务器没有出现,抛出错误:

Traceback (most recent call last):
File "[PATH_TO_MODULE1]/server_run.py", line 1, in <module>
from configuration.constants import *
File "[PATH_TO_MODULE2]/constants.py", line 1, in <module>
from config import *
ModuleNotFoundError: No module named 'config'

所以,看起来当我尝试在子进程中启动我的服务器时,它不再能看到导入了。 你们有什么想法我能解决它吗?

2 个答案:

答案 0 :(得分:1)

最终,找到了解决方案,采取了两个步骤: 1.在每个模块中,我有一个空 __ init __。py 文件,它被更改为:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
__version__ = '${version}'

2。而不是使用以下语法:

from configuration.constants import *
from configuration.config import *

配置和常量导入为:

from configuration import constants,config

然后我们在需要获得一些常量时使用它们。

感谢大家对此进行调查。

答案 1 :(得分:0)

不是使用os模块运行它,而是尝试使用import函数。您需要保存在相同的字典或子文件夹或python安装中,但这似乎是这样做的方法。 Like this post suggests