python - ImportError: No module with Popen subprocess other file in the same folder from terminal/cron
问题描述
当我exec.py
直接从终端或cronjob 执行(下面的结构)时,执行工作正常。但是,当我想检查脚本是否已经在运行并检查此状态以及从文件中exec.py
终止和/或启动时。(注意:它在 PyCharm 中正常工作)我得到:exec.py
cron.py
ImportError no module found named layer_a_first.layer_a_second.functions
直接来自终端或 cronjob 的以下命令正常工作:
/home/user/project/venv/bin/python3.6 /home/user/project/layer_a_first/layer_a_second/exec.py
我的项目结构是:
project/
|-- layer_a_first/
| |-- layer_a_second/
| | |-- exec.py
| | |-- cron.py
| | |-- functions.py
|-- layer_b_first/
| |-- functions.py
我在哪里调用了一些函数exec.py
:
import sys
sys.path.append('/home/user/project')
from layer_a_first.layer_a_second.functions import func_a
from layer_b_first.functions import func_b
# Call func_a
func_a()
# Call func_b
func_b()
和中的检查/终止/启动脚本cron.py
:
import sys
sys.path.append('/home/user/project')
import psutil
from subprocess import Popen
# Check/terminate/launch function
def launch():
proccron = 'exec.py'
for process in psutil.process_iter():
if process.cmdline() == ['python', proccron]:
print('Process ' + proccron + ' found. Terminating it.')
process.terminate()
Popen(['python', proccron])
print('Process ' + proccron + ' restarting.')
break
else:
print('Process ' + proccron + ' not found: starting it.')
Popen(['python', proccron])
launch()
当我cron.py
在 PyCharm 中启动时,它工作正常。但是当我使用终端或 cronjob 命令时,我得到了上面提到的ImportError
:
/home/user/project/venv/bin/python3.6 /home/user/project/layer_a_first/layer_a_second/cron.py
我已经尝试了很多更改sys.path
目录或使用os.chdir
跳转到正确的目录。这一切都行不通。有谁知道我该如何解决这个问题?最好它仍然在终端和 PyCharm 中工作,但终端命令具有优先级。
非常感谢您花时间帮助我!
解决方案
推荐阅读
- android - Recyclerview with Tablelayout On row click listner not working in android
- java - 卡夫卡处理器上下文 - 调度方法不起作用
- python - 为什么在 pyodide wasm 中运行 pandas 会导致内存错误?
- c# - Javascript序列化程序抛出内存异常C#
- amazon-web-services - 无法访问由 AWS Glue 中的 jar 文件生成的 csv 文件
- php - 在 elementor wordpress 中定义自定义类别的问题
- mongodb - UnhandledPromiseRejectionWarning: MongoError: from is not allowed in this atlas 层
- typescript - Vscode api - 像下拉菜单一样选择文件
- fortran95 - 为什么在尝试将派生类型放入模块时收到损坏的模块编译消息?
- html - 是否可以在 1 个文件中导入引导程序及其所有要求?