Shebang用nohup启动一个Python脚本

2024-05-20 22:26:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我觉得很长时间要写:

nohup python -u myscript.py > log.txt 2>&1 &

每次我想启动一个Python脚本作为后台进程。在

有没有可能出现类似shebang的第一行脚本:

^{pr2}$

这样的命令

run myscript.py

是否会使用myscript.py的第一行中的命令自动启动脚本

注意:我在寻找一个单一文件的解决方案,我不想让第二个文件myscript.shbash脚本伴随myscript.py来完成这项工作。


Tags: 文件runpy命令txt脚本log进程
1条回答
网友
1楼 · 发布于 2024-05-20 22:26:18

恐怕这是不可能的,但是你可以这样克服它:

创建文件运行_py.sh公司在某个地方(可能在/home/basj/bin/)并使其可运行:

#!/bin/bash
nohup python -u "$@" > log.txt 2>&1 &

然后在python文件中包含这个头(并使它们可运行)

^{pr2}$
网友
2楼 · 发布于 2024-05-20 22:26:18

正如上面的评论中提到的,您可以尝试使用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会话,则分叉进程仍在运行。在

网友
3楼 · 发布于 2024-05-20 22:26:18

好吧,这个文件写入nohup.out,而不是一个自定义文件。而阿法伊克,使用shebang黑客技术暂停到后台是不可能的

#!/usr/bin/nohup python

import sys

print("to stdout")
print("to stderr",file=sys.stderr)

给shebang解释器(Berkeley exec hack)提供参数不支持任何形式的io重定向,因此最好的办法可能是使用gilhad's answer中描述的自定义脚本

相关问题 更多 >