usrbinenv python3脚本开头#!/usr/bin/usrbinenv python3只有在unix/linux系统环境下有用吗,那在windows下怎么需要写吗,

Python脚本后台运行的几种方式
来源:易贤网&& 阅读:3929 次&&日期:
温馨提示:易贤网小编为您整理了“Python脚本后台运行的几种方式”,方便广大网友查阅!
这篇文章主要介绍了Python脚本后台运行的几种方式,linux下后台运行、通过upstart方式实现、通过bash脚本实现、通过screen、tmux等方式实现,需要的朋友可以参考下
一个用python写的监控脚本test1.py,用while True方式一直运行,在ssh远程(使用putty终端)时通过以下命令启动脚本:
python test1.py &
现在脚本正常运行,通过ps能看到进程号,此时直接关闭ssh终端(不是用exit命令,是直接通过putty的关闭按钮执行的), 再次登录后发现进程已经退出了。
通过后台启动的方式该问题已经解决,这里总结下,也方便我以后查阅。
linux 下后台运行
通过fork实现
linux环境下,在c中守护进程是通过fork方式实现的,python也可以通过该方式实现,示例代码如下:
#!/usr/bin/env python
import time,platform
def funzioneDemo():
# 这是具体业务函数示例
fout = open('/tmp/demone.log', 'w')
while True:
fout.write(time.ctime()+'\n')
fout.flush()
time.sleep(2)
fout.close()
def createDaemon():
# fork进程
if os.fork() & 0: os._exit(0)
except OSError, error:
print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
os.chdir('/')
os.setsid()
os.umask(0)
pid = os.fork()
if pid & 0:
print 'Daemon PID %d' % pid
os._exit(0)
except OSError, error:
print 'fork #2 failed: %d (%s)' % (error.errno, error.strerror)
os._exit(1)
# 重定向标准IO
sys.stdout.flush()
sys.stderr.flush()
si = file("/dev/null", 'r')
so = file("/dev/null", 'a+')
se = file("/dev/null", 'a+', 0)
os.dup2(si.fileno(), sys.stdin.fileno())
os.dup2(so.fileno(), sys.stdout.fileno())
os.dup2(se.fileno(), sys.stderr.fileno())
# 在子进程中执行代码
funzioneDemo() # function demo
if __name__ == '__main__':
if platform.system() == "Linux":
createDaemon()
os._exit(0)
通过upstart方式实现
可以通过upstart把应用封装成系统服务,这里直接记录下完整示例。
1、编写python脚本
[root@local t27]# cat test123.py
#!/usr/bin/env python
import os,time
while True :
print time.time()
time.sleep(1)
2、编写upstat配置文件
[root@local t27]# cat /etc/init/mikeTest.conf
description "My test"
start on runlevel [234]
stop on runlevel [0156]
chdir /test/t27
exec /test/t27/test123.py
3、重新加载upstate
initctl reload-configuration
4、启动服务
[root@local t27]# start mikeTest
mikeTest start/running, process 6635
[root@local t27]# ps aux | grep test123.py
? Ss 09:55 0:00 python /test/t27/test123.py
pts/1 S+ 09:56 0:00 grep test123.py
5、停止服务
[root@local t27]# stop mikeTest
mikeTest stop/waiting
[root@local t27]# ps aux | grep test123.py
pts/1 S+ 09:56 0:00 grep test123.py
[root@local t27]#
通过bash脚本实现
1、python代码
[root@local test]# cat test123.py
#!/usr/bin/env python
import os,time
while True :
print time.time()
time.sleep(1)
2、编写启动脚本
[root@local test]# cat start.sh
#! /bin/sh
python test123.py &
3、启动进程
[root@local test]#./start.sh
如果直接用&启动进程:
python test123.py &
直接关闭ssh终端会导致进程退出。
通过screen、tmux等方式实现
如果临时跑程序的话,可以通过screen、tmux启动程序,这里描述下tmux启动的方式。
1、启动tmux
在终端输入tmux即可启动
2、在tmux中启动程序
直接执行如下命令即可(脚本参考上面的): python test123.py
3、直接关闭ssh终端(比如putty上的关闭按钮);
4、重新ssh上去之后,执行如下命令:
tmux attach
现在可以看到python程序还在正常执行。
windows下后台运行
在windows下没有深入的研究过,我经常用的方法是修改python脚本的扩展名为".pyw",双击即可后台运行,不需要修改任何代码。
更多信息请查看
更多信息请查看
【】&&&&&【点此处查询各地各类考试咨询QQ号码及交流群】
易贤网手机网站地址:
由于各方面情况的不断调整与变化,易贤网提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
相关阅读 & & &
&nbsp&nbsp&nbsp &nbsp&nbsp&nbsp会员注册
本站不参与评论!()
自觉遵守:爱国、守法、自律、真实、文明的原则
尊重网上道德,遵守中华人民共和国各项有关法律法规
严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的评论
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
您在本站发表的评论,本站有权保留、转载、引用或者删除
参与本评论即表明您已经阅读并接受上述条款關于Python腳本開頭兩行的:#!/usr/bin/python和# * coding: utf8 *的作用 – 指定文件編碼類型
#!/usr/bin/python指定用什么解释器运行脚本以及解释器所在的位置# -*- coding: utf-8 -*-用来指定文件编码为utf-8的PEP 0263 -- Defining Python Source Code Encodingshttp://www.python.org/dev/peps/pep-0263/
估计有不少人注意过一些python脚本开头有这么行东东:#!/usr/bin/python它是用来干嘛的?貌似没有它对脚本功能也没啥影响。它是用来指定用什么解释器运行脚本以及解释器所在的位置。以test.py为例,脚本内容如下:def test():& & & & print 'hello, world'if __name__ == "__main__":& & & & test()运行脚本:python test.py输出:hello, world换一种方法运行:./test.py会提示出错,文件无可执行权限:-bash: ./test.py: Permission denied将文件设为可执行:chmod +x test.py继续运行:./test.py提示:./test.py: line 1: syntax error near unexpected token `('./test.py: line 1: `def test():'那是因为系统默认该脚本是shell脚本,把它当shell语句执行,当然失敗了。在前面加上#!/usr/bin/python申明l这是个python脚本,要用python解释器来运行:./test.py输出:hello, world这个东东常用在cgi脚本中,apache启动cgi脚本时就靠它来知道这是个python脚本,执行它需要的python解释器路径在哪里。有时候写 #!/usr/bin/python 还是不行,很简单,因为python解释器没有装在/usr/bin/目录,改成其所在目录就行了,或者更通用的方法是:#!/usr/bin/env python
更多相关文章
用UltraEdit查看当前文件编码 想判断文件的编码类型? 用强大的UltraEdit-
大部分python文件的头部都会写上 #!/usr/bin/python 或者 #!/usr/bin/env ,这个语句主要和运行模式有关, 如果我们用普通运行模式例如(linux) : python *.py 那么这个语句在此运行模式下无效.如果想让python程序像普通程序一样运行,例如:./*
原文在此,权作备忘: .cn/s/blog_494e45fe0102dwqy.html这个在unix类的操作系统才有意义. #!/usr/bin/python是告诉操作系统执行
python 支持3种编码声明,一般常用能见到下面两种 1.# -*- coding: utf-8 -*-
这种写法是为了兼容Emacs的编码声明 2.短一点,但Emacs不能用# coding=utf-8 短一点,但Emacs不能用
之所以要声明未编码类型 ,主要是中文出错的问题. 在py
今天在WingIDE下写了个脚本,传到服务器执行后提示: -bash: /usr/bin/autocrorder: /usr/bin/python^M: bad interpreter: No such file or directory 分析: 这是不同系统编码格式引起的:在windows系统中编 ...
1. The complete Python source file should use a single encoding. Embedding of differently encoded data is no
python 中的True和1及False和0是可以等价比较及是否是bool类型 1.True和1及False和0是可以等价比较 [ root]# cat test_true_false.py ok=0 if ok: print ok ok=1 if ok: pri
curl函数库实现爬网页内容的链接在 /linguanh/p/4292316.html 下面这个是没有name和id 标识的 &input type=&submit& value=&OnClick&/&
为VMware ESXi主机添加本地存储的过程及注意事项-之2 类别 [创作类型:原创]
img及父元素(容器)实现类似css3中的background-size:contain / background-size:cover &!DOCTYPE html& &html xmlns=&q ...
使用Numbers想实现MS Office中的超链接单元格功能,在网上找了半天,发现没有此功能.伤心..
MAC中安装Libre Office 打开表格类文档 选择需要超链接的单元格,选择“Insert”-&qu ...
$url = &/&; function parse($url) { if(!($fp = @fopen($url, 'rb')) ){ exit('路径错误 ...
网络结构:BAS(ME60-汇聚交换机-8220) 1.先把要修改的设备存盘. 2.对于需要更换VLAN的应先在中间的汇聚交换机透传新增网管vlan. 3.修改wand的数据,将网管端口更换为新的vlan,如果网管v
1.新浪微博 未分组的bug截图,每次刷新各有不同 2. 当当 重现:先选了2本书不够50
来源:/code/1864 foreach 并不是
emacs等安装在-/INSTALL目录下,在-下新建一个INSTALL目录. 1. em
Python手册上有个例子,用于输出10以内的斐波那契序列.代码如下: 1 a, b = 0, 1 2 while b & 10: 3 print(b) 4 a, b = b, a+b 用到了一些Python的 ...
转载地址:/yonderbyron/item/2e009cc65ec8 Mac OS X framework 解析 1.framework是什么? fra/usr/bin/python^M: bad interpreter: 没有那个文件或目录?
windows写的脚本程序,在传到linux下,添加执行权限,执行后会提示: /usr/bin/python^M: bad interpreter: 没有那个文件或目录,这个是什么原因造成的,如何解决?
2012年 12月6日
(634 威望)
请输入验证码:
[captcha placeholder]
或 后不会被要求输入验证码。
请输入验证码:
&&&& 或 后不会被要求输入验证码。
分析原因:
这是不同系统编码格式引起的:在windows系统中编辑的.sh .py文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。一般是因为windows行结尾和linux行结尾标识不同造成的。
解决方法:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File--&Conversions--&DOS-&UNIX即可。
2)linux下直接替换:
sed -i 's/^M//g'&&filename&(注意^M 在linux 下写法 按^M 是回车换行符,输入方法是按住CTRL+v,松开v,按m)
3)也可在Linux中转换:
首先要确保文件有可执行权限
#sh&chmod a+x filename
然后修改文件格式
#sh&vi filename
利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
& & & &fileformat=dos 或 fileformat=unix
利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)
最后再执行文件
#sh&./filename
本文来自:
2012年 12月6日
(238 威望)
2012年 12月12日
请输入验证码:
[captcha placeholder]
或 后不会被要求输入验证码。
提一个问题:
2016年 7月26日
(1,287 威望)
2016年 7月10日
(661 威望)
(966 威望)
2014年 12月10日
(1,089 威望)
2014年 6月24日
(628 威望)
欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。

我要回帖

更多关于 usr bin python2.7 的文章

 

随机推荐