zoukankan      html  css  js  c++  java
  • Python进程相关

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

    参考链接

    http://www.cnblogs.com/vamei/archive/2012/09/23/2698014.html

    父子进程的概念

    一个进程可以fork自身,成为一个子进程,并让子进程去exec另外一个程序

    python中的子进程

    python中通过subprocess包,来fork一个子进程,并运行一个外部程序

    需思考的点

    创建子进程后,父进程是否阻塞

    函数返回什么

    returncode不为0时(说明不是子进程),父进程如何处理

    简单使用

    subprocess.call()

    父进程等待子进程完成

    返回退出信息(returncode)

    subprocess.check_call()

    父进程等待子进程完成

    返回0

    会检查退出信息(returncode),如果returncode不为0则抛出subprocess.CalledProcessError错误,该对象包含有returncode属性,可用try...except...来检查

    subprocess.check_output()

    父进程等待子进程完成

    返回子进程向标准输出的输出结果

    会检查退出信息(returncode),如果returncode不为0则抛出subprocess.CalledProcessError错误,该对象包含有returncode属性和output属性,output属性为标准输出的输出结果,同样可用try...except...来检查

    简单使用举例

    list传参

    将程序名ls和参数-l放在一个表中传递给subprocess.call()

    rc = subprocess.call(["ls","-l"])

    string传参

    先运行一个shell,再用shell来解释整个字符串

    一些shell的内建命令必须使用shell来运行

    out = subprocess.call("ls -l", shell=True)

    高级使用 - 子进程并行&文本流

    subprocess.Popen类

    __init__(self, args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

    Popen对象创建后,父进程不会自动等待子进程完成

    child = subprocess.Popen(["ping","-c","5","www.google.com"])

    child.pid - 子进程的pid

    child.stdin - 子进程的stdin

    child.stdout - 子进程的stdout

    child.stderr - 子进程的stderr

    child.wait() - 父进程等待子进程完成

    child.poll() - 检查子进程状态

    child.send_signal(sig) - 给子进程发送信号

    child.kill() - 终止子进程

    child.terminate() - 终止子进程,与kill相等

    child.communicate(input=None) - 给予子进程stdin后,获得子进程的输出流,返回结果为元组类型(stdout,stderr)。需注意该方法会阻塞当前进程。

    高级使用举例

    父子进程并行

    child = subprocess.Popen(["ping","-c","5","www.google.com"])

    print("parent process")

    子进程stdout导向另一子进程stdin

    child1 = subprocess.Popen(["ls","-l"], stdout=subprocess.PIPE)

    child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE)

    out = child2.communicate()

    子进程等待当前进程输入

    child = subprocess.Popen(["cat"], stdin=subprocess.PIPE)

    child.communicate("vamei")

  • 相关阅读:
    初学C#和MVC的一些心得,弯路,总结,还有教训(3)--Dapper
    初学C#和MVC的一些心得,弯路,总结,还有教训(2)--关于Entity Framework
    windows下安装nodejs和express
    web前端自动化测试工具phantomjs的使用笔记
    jquery插件的模板
    jsonp跨域时如何解决xss漏洞
    js 判断web页面关闭、刷新、跳转
    各种排序算法的js实现
    zepto的getScript函数扩展
    js的面向对象和设计模式
  • 原文地址:https://www.cnblogs.com/yc913344706/p/8094202.html
Copyright © 2011-2022 走看看