2024-05-20 22:26:18 发布
网友
我觉得很长时间要写:
nohup python -u myscript.py > log.txt 2>&1 &
每次我想启动一个Python脚本作为后台进程。在
有没有可能出现类似shebang的第一行脚本:
这样的命令
run myscript.py
是否会使用myscript.py的第一行中的命令自动启动脚本?
myscript.py
注意:我在寻找一个单一文件的解决方案,我不想让第二个文件myscript.shbash脚本伴随myscript.py来完成这项工作。
myscript.sh
恐怕这是不可能的,但是你可以这样克服它:
创建文件运行_py.sh公司在某个地方(可能在/home/basj/bin/)并使其可运行:
#!/bin/bash nohup python -u "$@" > log.txt 2>&1 &
然后在python文件中包含这个头(并使它们可运行)
正如上面的评论中提到的,您可以尝试使用os.fork操作系统()将脚本发送到后台。至于stdout/stderr重定向,您还可以覆盖filehandles以获得所需的结果。看看这个例子:
import os import sys class LogWriter(object): def __init__(self, logfile): self._f = open(logfile, "w") def write(self, data): self._f.write(data) self._f.flush() logger = LogWriter("test.log") sys.stdout = logger sys.stderr = logger if os.fork(): sys.exit() # Main loop import time while True: print 'hello' time.sleep(1)
引入了类LogWriter来为每次写入操作添加flush()。如果关闭启动脚本的ssh会话,则分叉进程仍在运行。在
好吧,这个文件写入nohup.out,而不是一个自定义文件。而阿法伊克,使用shebang黑客技术暂停到后台是不可能的
nohup.out
#!/usr/bin/nohup python import sys print("to stdout") print("to stderr",file=sys.stderr)
给shebang解释器(Berkeley exec hack)提供参数不支持任何形式的io重定向,因此最好的办法可能是使用gilhad's answer中描述的自定义脚本
恐怕这是不可能的,但是你可以这样克服它:
创建文件运行_py.sh公司在某个地方(可能在/home/basj/bin/)并使其可运行:
然后在python文件中包含这个头(并使它们可运行)
^{pr2}$正如上面的评论中提到的,您可以尝试使用os.fork操作系统()将脚本发送到后台。至于stdout/stderr重定向,您还可以覆盖filehandles以获得所需的结果。看看这个例子:
引入了类LogWriter来为每次写入操作添加flush()。如果关闭启动脚本的ssh会话,则分叉进程仍在运行。在
好吧,这个文件写入
nohup.out
,而不是一个自定义文件。而阿法伊克,使用shebang黑客技术暂停到后台是不可能的给shebang解释器(Berkeley exec hack)提供参数不支持任何形式的io重定向,因此最好的办法可能是使用gilhad's answer中描述的自定义脚本
相关问题 更多 >
编程相关推荐