繁体   English   中英

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

[英]Run python script from another python script on linux

我正在使用 python 2.7 和 ubuntu 16.04。

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

所以,任务听起来很简单:我需要从另一个 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'

因此,看起来当我尝试在子进程中启动服务器时,它不再看到导入。 你们知道我该如何解决吗?

最终,找到了解决方案,采取了2个步骤: 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

然后我们在需要获取一些常量时使用对它们的引用。

感谢大家的调查。

而不是使用os模块运行它尝试使用import功能。 您需要保存在同一个字典或子文件夹或 python 安装中,但这似乎是这样做的方法。 就像这篇文章所暗示的那样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM