先是本地有一个静态站,平时 docsify 啥的也在一起,所以需要对这个目录启动一个 server 。
python -m http.server 80 --directory D:\OneDrive\mysite\ --bind 10.0.0.13
然后还写了一些 rest 接口,好用手机控制 PC 的快进 /播放暂停 /音量 /切换窗口 /等动作,这也需要启动一个 server 。用的是一个 python 。
from wsgiref.simple_server import make_server
另外还有几个类似计划任务的小工具,比如定期清理目录,备份各个软件的配置文件,更新 PAC 等等。
系统是 Win10
最终解决方案如下,写个主python文件,然后开机自动运行就好了。 为了看得清晰点,可以在子进程的logging里都打一下各自的pid。
from multiprocessing import Pool
import os
cmd_list = [
r'python -m http.server 80 --directory D:\OneDrive\erimus-koo.github.io\ --bind 10.0.0.13',
r'python D:\1.py',
r'python D:\2.py'
]
def run_cmd(cmd):
os.system(cmd)
def main():
p = Pool(len(cmd_list))
for cmd in cmd_list:
p.apply_async(run_cmd, (cmd,))
p.close()
p.join()
1
favourstreet 2020-04-12 19:25:59 +08:00 via Android
多个 httpserver 怎么启动得起来,80 端口只有一个
|
2
whywhywhy 2020-04-12 19:26:23 +08:00
为啥不用隐藏窗口或者服务的方式运行呢
|
3
just1 2020-04-12 19:27:03 +08:00
任务计划程序,创建计划任务
|
4
raymanr 2020-04-12 19:32:12 +08:00 1
windows terminal 可以放在一个窗口,自动启动你可以看看有没有办法研究一下
也可以用 pythonw 运行就不显示窗口 |
5
JCZ2MkKb5S8ZX9pq OP |
6
JCZ2MkKb5S8ZX9pq OP @whywhywhy 不太懂怎么搞,能稍微具体点提点一下吗?
|
7
niubee1 2020-04-12 19:34:59 +08:00
mac 下有 nginx,为毛不用?
|
8
niubee1 2020-04-12 19:36:17 +08:00 1
win10 有 wsl,为啥不用
|
9
JCZ2MkKb5S8ZX9pq OP |
10
JCZ2MkKb5S8ZX9pq OP @raymanr 其实我还是希望看到窗口,因为有些 log 信息之类的没有单独写,万一有问题稍微瞥一眼还比较方便。
|
11
JCZ2MkKb5S8ZX9pq OP @raymanr
请教一下,如果用 pythonw 运行的话,我怎么分辨各个 pid 在跑的是什么内容呢? |
12
JCZ2MkKb5S8ZX9pq OP 看了下计划任务,感觉设定起来还是有点麻烦。
还是希望写一个 py,来运行定时任务。目前的定时任务都耗时很短,所以也不涉及时间的冲突和多程的需求。 现在的需求等于是两个 http-server 加一个定时任务控制 py,三个任务能不能合到一起,并且随 windows 启动自动运行。 |
13
ipwx 2020-04-12 20:05:52 +08:00
相同地址同一端口只能运行一个 HTTP server 。要么你自己写 dispatcher,要么用现有的比如 nginx 。
|
14
JCZ2MkKb5S8ZX9pq OP |
15
Trim21 2020-04-12 20:19:27 +08:00 via Android
之前用 golang 写过一个类似的程序自己用…
|
16
ipwx 2020-04-12 21:02:28 +08:00
@JCZ2MkKb5S8ZX9pq To tell the truth, 写个界面程序属于太麻烦了我不想做的事情之一。虽然很多时候我也会像你一样想要个托盘程序,但是十分钟之内我就会放弃。
|
17
Trim21 2020-04-12 21:11:54 +08:00
https://github.com/Trim21/commandTray 用 go 写的
本来折腾过托盘,但是 golang 的各种托盘库不是打开有明显的延迟就是编译很麻烦,所以后来就改成了 cli 程序 自动启动全靠计划任务 |
19
cmdOptionKana 2020-04-12 21:14:49 +08:00
@JCZ2MkKb5S8ZX9pq 我也有一个类似的需求,这是我的解决方案:
截图 https://i.loli.net/2020/04/12/qYcUzSpfi3I9Bvb.jpg 代码 https://github.com/ahui2016/mima-go/blob/master/mima-gui.ahk 一共才 74 行代码。autohotkey 可以把这一系列操作自动化:打开 console, 输入命令,隐藏 console 。 然后我做了一个按钮用来把隐藏的 console 重新显示,这样就能查看 log 了。 当然,我这个只是单个程序,你修改一下让它自动操作多个程序应该不难。 |
20
JCZ2MkKb5S8ZX9pq OP @cmdOptionKana
请问你的 PID 是怎么对应上的呢?查看进程管理器然后手敲吗? 我看楼上说的 pythonw 的确是个清净的办法,但是在需要查看的时候怎么调起对应的 PID 窗口我还没有好的方法。 其实类似 tmux 的方案我是觉得还不错,如果能直接跨平台就好了,毕竟 mac 上已经配置了一堆。 |
21
cmdOptionKana 2020-04-12 21:32:32 +08:00
|
22
JCZ2MkKb5S8ZX9pq OP @cmdOptionKana
那我再看看你的代码,刚才没看明白。 |
23
cmdOptionKana 2020-04-12 21:34:41 +08:00
@JCZ2MkKb5S8ZX9pq 我用 autohotkey 打开控制台,于是这个控制台就受我控制,我可以用让它隐藏、显示、输入命令、输入回车或任何按键。
|
24
dicc 2020-04-13 10:29:46 +08:00 1
import os
import threading def start(cmd): while 1: os.system('"%s"' % cmd) print('>>>', cmd) def run(cmd): threading._start_new_thread(start, (cmd, )) run(r'D:\app\bill.bat - 快捷方式.lnk') run(r'D:\app\frps_run.bat - tmp.lnk') run(r'D:\app\frps_run.bat - 快捷方式.lnk') run(r'D:\app\serv.bat - 快捷方式.lnk') start(r"D:\app\webd.bat - 快捷方式.lnk") |
25
dicc 2020-04-13 10:30:21 +08:00
改下缩进, 我就是这样勉强用着的
|
26
JCZ2MkKb5S8ZX9pq OP |
27
JCZ2MkKb5S8ZX9pq OP @dicc 试了一下多进程
def main(): p = Pool(len(cmd_list)) # 设置进程数 for cmd in cmd_list: p.apply_async(os.system(cmd)) p.close() p.join() |
28
JCZ2MkKb5S8ZX9pq OP @dicc 不过这样写的话,只能打印到 cmd_list 里的第一个 cmd 的信息,后面两个在后台,但打印信息回不到主窗口。不知道怎么改进比较好。
|
29
JCZ2MkKb5S8ZX9pq OP @dicc 发现还是不能偷懒,拆成 function 顺利解决。
详见 append 。 |
30
dicc 2020-04-13 21:39:13 +08:00
@JCZ2MkKb5S8ZX9pq http://chat.bpbpbp.xyz:8000/download/tt.7z/static/upload/faffc1f15ef0ed31.7z
我用的多线程,不是多进程,不信你试试我这个,执行 tt-main.py 就行了 |
31
JCZ2MkKb5S8ZX9pq OP @dicc 我知道你是多线,我个人偏好多进程一点,能用就行哈。刚补齐 append 的部分了。
|