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
kidlfy
V2EX  ›  Python

一个 py 文件怎么同时启动两个服务?用命令行

  •  
  •   kidlfy · 2018-12-04 15:46:28 +08:00 · 2956 次点击
    这是一个创建于 2182 天前的主题,其中的信息可能已经有所发展或是发生改变。

    str_one=('python app.py --port=8099') str_two=('python app.py --port=8098') os.system(str_one) os.system(str_two)

    这样写只会启动一个。是因为只 fork 了一个子进程 然后等待它结束 再往下运行 有什么办法同时运行两句命令启动两个服务呢

    谢谢

    12 条回复    2018-12-04 21:39:06 +08:00
    zh826256645
        1
    zh826256645  
       2018-12-04 15:55:37 +08:00
    用 nohup 试试?或者 Supervisor
    d0m2o08
        2
    d0m2o08  
       2018-12-04 15:56:24 +08:00
    搜 python threading
    clino
        3
    clino  
       2018-12-04 15:58:20 +08:00
    此时不能用 os.system ,因为退出才返回
    可以用 os.popen 试试
    wwqgtxx
        4
    wwqgtxx  
       2018-12-04 16:02:53 +08:00 via iPhone
    popen 呀,另外不要用楼上说的 os.popen,那个已经被标记为过时的了,平时用 popen 模块
    xpresslink
        5
    xpresslink  
       2018-12-04 16:06:57 +08:00
    要开多进程才行

    import subprocess
    subprocess.Popen(str_one)
    subprocess.Popen(str_two)
    kidlfy
        6
    kidlfy  
    OP
       2018-12-04 16:17:24 +08:00
    @xpresslink 它会报 没有这个文件 的错误 但是 os.popen 就可以直接执行
    www5070504
        7
    www5070504  
       2018-12-04 17:09:57 +08:00
    @kidlfy 试试用绝对路径 另外参数加上 shell=True
    kidlfy
        8
    kidlfy  
    OP
       2018-12-04 17:38:32 +08:00
    @www5070504 对, 可以了 谢谢 另外 你知道怎么关闭文件的时候 kill 掉所有的子进程吗 只能手动吗
    www5070504
        9
    www5070504  
       2018-12-04 17:45:41 +08:00
    @kidlfy 注册信号处理函数 在 signal 库里 可以调用子进程对象的 kill 方法
    www5070504
        10
    www5070504  
       2018-12-04 17:51:34 +08:00
    @kidlfy 或者记录子进程的 pid 用 os.kill() 前一种方法比较好一些但是说实话业务写完一般都得手动退出 多进程很容易出现不能完全退出的情况...
    xmoiduts
        11
    xmoiduts  
       2018-12-04 18:02:55 +08:00 via Android
    能用 & 吗
    python ………… &
    xpresslink
        12
    xpresslink  
       2018-12-04 21:39:06 +08:00
    @kidlfy 你加个绝对路径还不会么?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:27 · PVG 19:27 · LAX 03:27 · JFK 06:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.