python os模块 进程处理

转载 2012年03月26日 09:51:41

使用 os 执行操作系统命令

import os
if os.name == "nt":
    command = "dir"
else:
    command = "ls -l"
os.system(command)

命令通过操作系统的标准 shell 执行, 并返回 shell 的退出状态. 需要注意的是在 Windows 95/98 下, shell 通常是 command.com

它的正常退出状态总是0.


使用 os 模块启动新进程


import os
import sys
program = "python"
arguments = ["hello.py"]
print os.execvp(program, (program,) +  tuple(arguments))
print "goodbye"
hello again, and welcome to the show


Python 提供了很多表现不同的 exec 函数.使用的是 execvp 函数, 它会从标准路径搜索执行程序, 把第二个参数(元组)作为单独的参数传递给程序, 并使用当前的环境变量来运行程序.

 

在 Unix 环境下, 你可以通过组合使用 exec , fork 以及 wait 函数来从当前程序调用另一个程序.

fork 函数复制当前进程, wait 函数会等待一个子进程执行结束.


import os
import sys
def run(program, *args):
    pid = os.fork()                                         #fork 函数在子进程返回中返回 0
    if not pid:
        os.execvp(program, (program,) +  args)
    return os.wait()[0]                                 #wait 函数会等待一个子进程执行结束.
run("python", "hello.py")
print "goodbye"
hello again, and welcome to the show
goodbye

 

fork 函数在子进程返回中返回 0 (这个进程首先从 fork 返回值), 在父进程中返回一个非 0 的进程标识符(子进程的 PID ).

也就是说, 只有当我们处于子进程的时候 "not pid" 才为真.

 

fork 和 wait 函数在 Windows 上是不可用的, 但是你可以使用 spawn 函数.

不过, spawn 不会沿着路径搜索可执行文件, 你必须自己处理好些.


import os
import string

def run(program, *args):
    for path in string.split(os.environ["PATH"], os.pathsep):
        file = os.path.join(path, program) + ".exe"
        try:
            return os.spawnv(os.P_WAIT, file, (file,) + args)
        except os.error:
            pass
    raise os.error, "cannot find executable"

run("python", "hello.py")

print "goodbye"

hello again, and welcome to the show
goodbye


Unix 系统中, 你可以使用 fork 函数把当前进程转入后台(一个"守护者/daemon").

一般来说, 你需要派生(fork off)一个当前进程的副本, 然后终止原进程

使用 os 模块使脚本作为守护执行 (Unix)


import os
import time

pid = os.fork()#fork 函数在子进程返回中返回 0 , 在父进程中返回一个非 0 的进程标识符(子进程的 PID ).
if pid:
os._exit(0) # kill original
print "daemon started"
time.sleep(10)
print "daemon terminated"

使用 os 模块终止当前进程

try:
sys.exit(1) #抛出异常
except SystemExit, value: #被捕获不做退出操作
print "caught exit(%s)" % value

try:
os._exit(2) #直接退出不抛出异常
except SystemExit, value: #捕获无效
print "caught exit(%s)" % value

print "bye!"

caught exit(1)

先前例子中的 _exit 函数会终止当前进程. 而 sys.exit 不同, 如果调用者(caller) 捕获了 SystemExit 异常, 程序仍然会继续执行.
os._exit() 程序会直接结束 而使用sys.exit() 会类似于抛出个异常


python os模块进程函数

———-Table of Contents 1. 系统进程 2. 举例2.1. os.fork 2.2. os.exec 和 os.system 2.3. os.wait 3. 总结系统进程今天在看《...

Python:OS 模块 -- 进程管理

os模块的简介参看 Python::OS 模块 -- 简介 os模块的文件相关操作参看 Python::OS 模块 -- 文件和目录操作 os模块的进程参数 Python::OS 模块 -- 进...

Python之os模块的进程管理介绍

Python之os模块的进程管理介绍
  • samxx8
  • samxx8
  • 2011年04月06日 11:35
  • 656

Python:os模块的进程管理

有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不...

Python之os模块的进程管理介绍

有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自已的工作内存区域。不过,虽然进程可在单独的内存空间中执行,但除非这些进程在单独的处理器上执行,否则,实际并不...
  • llg8212
  • llg8212
  • 2014年03月28日 10:13
  • 483

Python之OS模块进程管理介绍--os.fork()

转自:http://davidbj.blog.51cto.com/4159484/1240586 有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自...

Python之OS模块进程管理介绍--os.fork()

转自:http://davidbj.blog.51cto.com/4159484/1240586 有两种方式来实现并发性,一种方式是让每个“任务"或“进程”在单独的内在空间中工作,每个都有自...
  • zgaoq
  • zgaoq
  • 2017年07月11日 18:35
  • 94

python学习之os.path模块&&elementtree处理xml文件

python学习之os.path模块&&elementtree处理xml文件   Posted on 2011年04月25日 by freetstar 学习中,肯定有不对的地方...

python基础-random、os模块、异常处理模块

random 生成一个6位数字随机验证码 生成一个6位数字字母的验证码 os模块 异常处理模块randomimport random#大于0且小于1之间的小数 print(random.random(...

python简单程序使用signal模块处理僵死进程

程序一:未使用信号处理程序 #! /usr/bin/python import socket, os """ 简单网络程序,每次连接后派生的子进程终止后都会成为僵死进程 """ serSoc...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python os模块 进程处理
举报原因:
原因补充:

(最多只允许输入30个字)