Python 程序后台运行,如何写在控制台与他交互啊。怎么自定义命令 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chunhai
V2EX    Python

Python 程序后台运行,如何写在控制台与他交互啊。怎么自定义命令

  •  
  •   chunhai 2022-09-07 01:49:38 +08:00 2508 次点击
    这是一个创建于 1129 天前的主题,其中的信息可能已经有所发展或是发生改变。

    写一个定时程序,线程始终后台执行。然后通过控制台或者 cmd 输入命令,添加新的定时任务。 这类的 python 程序都是通过什么写的啊

    请教以下各位大佬。

    15 条回复    2022-09-08 15:24:25 +08:00
    ccdjh
        1
    ccdjh  
       2022-09-07 02:59:52 +08:00
    你是需要这个?

    https://python-rq.org/
    LeeReamond
        2
    LeeReamond  
       2022-09-07 07:50:51 +08:00
    很简单,原教旨主义的程序是面向过程的,也就是逐条执行指令。你想要在这个基础上加上外部互动的功能,那你就需要额外再写一个能接收输入输出的过程,它可以以单独的一个线程或进程的形式存在。
    lawsiki
        3
    lawsiki  
       2022-09-07 10:41:15 +08:00
    用一个文件或数据库保存任务配置就行了,A 定时读取配置执行,B 添加任务的时候往配置写
    chunhai
        4
    chunhai  
    OP
       2022-09-07 11:32:21 +08:00
    @lawsiki 定时读取感觉这样写法有点奇怪增大了开销啊,而且添加这样做,删除和修改有点麻烦了啊。
    我想实现像 docker 那样 通过 docker run 这样启动容器的方式该怎么写呢?
    chunhai
        5
    chunhai  
    OP
       2022-09-07 11:34:38 +08:00
    @LeeReamond 这个过程的接收输入通过什么实现的啊
    renmu
        6
    renmu  
       2022-09-07 11:48:41 +08:00 via Android
    一个进程轮询执行,一个进程接收数据
    julyclyde
        7
    julyclyde  
       2022-09-07 11:56:06 +08:00
    @chunhai 开个网络监听
    julyclyde
        8
    julyclyde  
       2022-09-07 11:56:43 +08:00
    @lawsiki 修改配置文件显然是个不靠谱的做法
    如果程序读取的时候正在编辑怎么办
    lawsiki
        9
    lawsiki  
       2022-09-07 14:09:23 +08:00
    @julyclyde 通过程序去添加修改,不是人工编辑文本,像 crontab ,青龙面板这些的底层逻辑不就是这样么?
    LindsayZhou
        10
    LindsayZhou  
       2022-09-07 16:20:28 +08:00
    配置文件,不是定时读取,用 inotify 监听文件变化,Python 有 SDK 的。
    如果不希望加 inotify 依赖的话,Python 监听 HUP 信号,收到时重载配置。手动重载用 `kill -HUP [$pid]`。如果用 systemd 管理,加一行 `ExecReload=/bin/kill -HUP $MAINPID`。
    以上都在说 Linux ,Windows 的话,我就不清楚了,我不太会用 Windows.
    LindsayZhou
        11
    LindsayZhou  
       2022-09-07 16:28:50 +08:00
    # 10
    以上说用配置文件是比较简便的方法,如果要比较复杂的交互,还是按楼上的说法开个线程接收数据,asyncio 开个 Task 什么的。
    docker 默认是用的 Unix Socket 通信,也可以开 http 。
    julyclyde
        12
    julyclyde  
       2022-09-07 16:30:14 +08:00
    @lawsiki crontab 的编辑是另外进行的,然后覆盖到正式的文件名上; crond 每分钟发现一次文件是否变动;
    其他服务器一般都是单独发信号通知重新加载配置文件的

    你不能只看某些面板做到了这功能而不深究其原理啊
    再说了,你的程序如果运行出毛病了,那些面板会为你负责么
    ClericPy
        13
    ClericPy  
       2022-09-07 21:11:05 +08:00
    IPC 的手段很多啊, 你说的 sys.stdin 一般就够了

    复杂点的最近用了下 Unix domain socket, 那高并发杠杠的, 尤其是底层 asyncio 都包好了变成 Stream 的 Reader 和 Writer, 写啥都跟写 Pipe 一样.

    或者你监控一个文件夹里出现新的 py 文件就导入它?

    或者开个 HTTP

    反正思路很多看你愿意怎么玩了, 不过看你的意思感情就是个随时拔插的一个 systemd / supervisor 啊... 那还不如丢一堆 alias 在 tmux 里随便折腾呢
    julyclyde
        14
    julyclyde  
       2022-09-08 10:11:46 +08:00
    @ClericPy 出现一个新的就导入,需要有本地文件系统的权限才能注入新任务,这要求是不是太高了?
    而且只能插不能拔
    rev1si0n
        15
    rev1si0n  
       2022-09-08 15:24:25 +08:00
    xml/jsonrpc
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1152 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:28 PVG 07:28 LAX 16:28 JFK 19:28
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86