在linux上从另一个python脚本运行python脚本

在linux上从另一个python脚本运行python脚本,python,linux,Python,Linux,我正在使用python 2.7和ubuntu 16.04 我在python上有一个简单的REST服务器:module1中的fileserver\u run.py,它正在从module2导入一些脚本。 现在我正在编写一个集成测试,它向我的服务器发送POST请求,并验证我的服务器是否采取了必要的操作。显然,服务器应该启动并运行,但我不想手动操作,我想从我的测试中启动服务器(server_run.py,它也有main方法):server_run_test.pymodule3中的文件 因此,任务听起来很

我正在使用python 2.7和ubuntu 16.04

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

因此,任务听起来很简单:我需要从另一个python脚本开始编写一个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'
回溯(最近一次呼叫最后一次):
文件“[PATH_TO_MODULE1]/server_run.py”,第1行,在
从configuration.constants导入*
文件“[PATH_TO_MODULE2]/constants.py”,第1行,在
从配置导入*
ModuleNotFoundError:没有名为'config'的模块
所以,当我试图在子进程中启动服务器时,它似乎不再看到导入。
你们知道我如何修复它吗?

不要使用
os
模块运行它,试着使用
import
功能。您需要保存在同一个字典、子文件夹或python安装中,但这似乎是实现此目的的方法

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

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
__version__ = '${version}'
二,。而不是使用以下语法:

from configuration.constants import *
from configuration.config import *
配置和常量被导入为:

from configuration import constants,config
当需要得到一些常数时,我们会引用它们


谢谢大家的关注。

谢谢,在我看来,我从那篇文章中尝试了很多建议,问题是我的服务器应该在异步模式下运行,因为在我终止它之前,它根本不存在。因此,使用诸如os.system或仅导入服务器运行并启动main()之类的方法将阻止me@Viacheslav如果你读了我最后的评论,那就错了。我会寻找答案,然后再给你回复。谢谢你的回复。os.system()不会阻止我吗?我的意思是,我在测试开始时启动它,然后做一些操作,但当我启动服务器时,它只是阻塞了同一个进程it@Viacheslav线程或子进程模块应“取消阻止”它。如果不是这样的话,这是非常令人惊讶的。也许你可以给我一些代码来使用,因为我不知道它到底是如何工作的,所以很难完全理解?@Viacheslav,你能重新加载页面吗。我删除了那个评论,因为它是针对windows的。