gpt4 book ai didi

Python:将参数传递给后台进程

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:15 26 4
gpt4 key购买 nike

我正在为我的问题寻找更好的解决方案。

我需要运行 python 脚本,然后在它运行时(在后台)我需要在用户想要的时候更改里面的值。它每小时可能发生多达 20 次甚至更多,但也有一段时间什么都不会发生。因此,更改必须尽可能干净。

我正在研究以下背景。我有两个脚本:starter 和 main。主脚本的任务是设置串行连接并与外部设备通信,此进程作为 nohup main.py & 运行 - 启动后它可能会一直运行到重启。如果没有额外的参数,启动脚本的任务就是启动 main。 Main 在后台运行,starter 正在关闭。

如果有额外的参数,我想“连接”到已经运行的 main 并将这个参数的值发送给它。我目前正在使用外部文件“last.cfg”来交换数据,但是否有任何“更好”的解决方案?我已经阅读了有关多处理模块和使用管道的信息,但我无法满足我的需要。可能我还没有看到重要的东西。


当前的方法示例(我已经删除了所有不必要的代码):

主.py

if __name__ == '__main__':
while True:
f = open("./desktop/last.cfg","r+")
contents = f.readline()
print(contents)

starter.py

import argparse
import subprocess
import re

parser = argparse.ArgumentParser()
parser.add_argument("val", nargs='?', default="null")
args = parser.parse_args()

if args.val == 'null':
sub = subprocess.Popen("nohup ./desktop/main.py &", shell=True)
else:
f = open("./desktop/last.cfg","r+")
content = f.readline()
p = re.compile('(val=)([0-9]*)')
content = p.sub('\g<1>'+args.val,content)
f.close()
f = open("./desktop/last.cfg","w+")
f.write(content)

最佳答案

所以您基本上想要的是一种从外部更改正在运行的 Python 脚本中的某些值的方法。我认为您的文件方法是最简单和最好的方法,这就是常规软件一直使用的方法(需要时重新加载的配置文件)。我认为您不需要使用共享内存、FIFO、网络套接字或任何其他可以使用的东西来实现您的需要。简单有返回。

可以对您的文件方法进行简单的改进,使其看起来一点也不差。首先,不要一直读文件,需要的时候才读。您可以通过使用 stat ( documentation ) 偶尔检查文件的修改时间来实现它,并且只有在修改时间发生变化时才读取它。或者,您可以执行 Linux 守护程序通常执行的相同操作:在收到 SIGHUP 后重新读取您的配置。信号处理的例子是 here ,您可能需要 SIGHUP,而不是示例中的 SIGALRM。要向您的进程发送 SIGHUP 信号,请使用 kill -HUP pid,其中 pid 是进程 ID,如 ps -a 所示

关于Python:将参数传递给后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53799503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com