我发现要写很长时间了:
$sql="SELECT * FROM tracks ORDER BY $sort";
echo '<tr>';
echo '<td><a href="report_tracks.php?s=title">Title</a><td>';
echo '<td><a href="report_tracks.php?s=album">Album</a><td>';
echo '<td><a href="report_tracks.php?s=artist">Artist</a><td>';
echo '<td><a href="report_tracks.php?s=count">Count</a><td>';
echo '</tr>';
每次我想将Python脚本作为后台进程启动。
是否有可能有类似shebang的第一行脚本,如:
nohup python -u myscript.py > log.txt 2>&1 &
这样的命令就像
#!nohup python -u myscript.py > log.txt 2>&1 &
import time
while True:
print 'hello'
time.sleep(1)
会自动启动脚本,并在run myscript.py
的第一行显示命令吗?
注意:我正在寻找一个单文件解决方案,我不希望在myscript.py
上有第二个文件myscript.sh
bash脚本来完成这项工作。< / em>的
答案 0 :(得分:1)
我担心,这不是直接可能的,但你可以像这样克服它:
在某处创建文件run_py.sh(可能在/ home / basj / bin /中)并使其可运行:
#!/bin/bash
nohup python -u "$@" > log.txt 2>&1 &
然后在你的python文件中包含这个标题(并使它们可运行)
#!/home/basj/bin/run_py.sh
print "I am in python on background with nohup now :)"
答案 1 :(得分:0)
好吧,这个写入Meal
而不是自定义文件。而afaik,使用shebang hack暂停到后台是不可能的
nohup.out
给shebang解释器(Berkeley exec hack)提供参数不支持任何形式的io重定向,所以最好的选择可能是使用gilhad's answer中描述的自定义脚本
答案 2 :(得分:0)
如上面的评论所述,您可以尝试使用os.fork()将脚本发送到后台。对于stdout / stderr重定向,您还可以覆盖文件句柄以获得所需的结果。看看这个例子:
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会话,分叉进程仍然在运行。