文章目录

  • 启动程序的其他方法
    • `os.spawn`函数家族
    • *Windows*下的`os.startfile`调用
      • 使用*DOS*的`start`命令
      • `os.startfile`调用

启动程序的其他方法

os.spawn函数家族

os.spawn家族的名称中,和os.exec类似,“l”表示需要将参数分别列出,“p”则代表在系统路径中寻找可执行文件,而“e”表示向派生程序传入一个提供shell环境变量的字典,但带“p”的函数在Windows下不受支持;Windows系统可支持所有进程模式标志,但分离模式和覆盖模式在Unix下不受支持。os.spawnvos.spawnveWindowsUnix系统中都可以运行。

在基本操作方面,它们类似于在Unixforkexec调用结合并可以替代我们之前学到的systempopen调用。

>>> print(open('make_words.py').read())
#!/usr/bin/env python
"测试程序"def main():print('spam')print('eggs')print('ham')if __name__ == '__main__':main()>>> import os
>>>
>>> os.system('python make_words.py')
spam
eggs
ham
0
>>> results = os.popen('python make_words.py').read()
>>> print(results)
spam
eggs
ham>>> import sys
>>> py_path_str = sys.executable
>>> os.spawnv(os.P_WAIT, py_path_str, ('python', 'make_words.py'))
spam
eggs
ham
0
>>> os.spawnv(os.P_NOWAIT, py_path_str, ('python', 'make_words.py'))
8622
>>> spam
eggs
ham
  • spawn函数家族非常类似Unix下的分支程序,但它们不会去复制它们的进程(因此共享描述符不起作用),不过它们可以用来启动一个完全独立于它们的调用者而运行的程序。

示例:spawnv.py

#!/usr/bin/env python
"测试os.spawnv"import os
import sysdef main():platform_str = sys.platformpy_path_str = sys.executableif platform_str[:3] == 'win':for i_id_int in range(10):pid_int = os.spawnv(os.P_NOWAIT, py_path_str, ('python', 'child.py', str(i_id_int)))print('Process {} spawned'.format(pid_int))else:for i_id_int in range(10):pid_int = os.fork()if pid_int:print('Process {} spawned'.format(pid_int))else:os.execlp('python', 'python', 'child.py', str(i_id_int))print('Main process exit')if __name__ == '__main__':main()

输出:spawnv.py

Process 10732 spawned
Process 10733 spawned
Process 10734 spawned
Process 10735 spawned
Process 10736 spawned
Process 10737 spawned
Process 10738 spawned
Process 10739 spawned
Process 10740 spawned
Process 10741 spawned
Main process exit
Hello from child! 10732 0
Hello from child! 10733 1
Hello from child! 10737 5
Hello from child! 10738 6
Hello from child! 10736 4
Hello from child! 10735 3
Hello from child! 10734 2
Hello from child! 10741 9
Hello from child! 10739 7
Hello from child! 10740 8
  • os.spawnv:期待一个进程模式标识符,Python解释器的完整路径,以及一个代表用于启动新进程的shell命令行的字符串构成的元组。
  • sys.executable:正在运行脚本的Python解释器执行程序的路径。
  • 进程模式标识符:
    • os.P_NO_WAITos.P_WAITOspawn函数将在进城创建后返回,返回值为进程ID。二者在UnixWindows下均可用。
    • os.P_WAITspawn函数在新进程结束前不会返回,如果成功运行,则返回进程的退出代码;如果进程被一个信号终止了,则返回“-signal”。它在UnixWindows下皆可用。
    • os.P_DETACHos.P_OVERLAYP_DETACH类似于P_NOWAIT,不过新的进程从调用它的进程的控制台中分离出来。如果使用了P_OVERLAY,那么当前程序将会被覆盖(类似os.exec)。二者仅在Windows下可用。
  • 子程序的输出在spawnv.py运行的控制台中出现;当使用P_NOWAIT时,标准输出指向父进程的控制台,但如果使用P_DETACH,它的输出流看起来没流向任何地方。

目前的subprocessmultiprocessing模块都提供用命令行派生程序的具有可移植性的替代方案。事实上,除非os.spawn提供不可或缺的独特行为,最好使用更具可移植性的multiprocessing模块。

Windows下的os.startfile调用

使用DOSstart命令

os.system调用可用来在Windows下启动一个DOSstart命令,后者基于一个文件的Windows文件名关联,独立地打开(即运行)这个文件,就像单击打开一样。

os.startfile调用

os.startfile(filename)

———————————————————————————————————————————

关于Python启动程序的其他方法,这些你应该知道>_(Python编程 | 系统编程 | 并行系统工具 | 启动程序的其他方法)相关推荐

  1. python中的集合set类型是可变的吗_[Python] Python数据类型(三)集合类型之set集合和frozenset集合...

    1.集合基本概念 集合是0-n个对象引用的无序组合,集合中存储的元素不可重复,因此这些对象引用的引用的对象必须是可哈希运算的 .  1.python中提供了两种内置的集合类型:可变的set类型和固定的 ...

  2. python3程序运行中会跳过注释行_[python] 去除代码源文件中单行注释

    """ 利用正则表达式去除文件中的单行注释,支持多行稍加更改即可 """ import os import re pattern_c = { ...

  3. 程序员如何学习更好的知识_如何保持学习并成为更好的程序员

    程序员如何学习更好的知识 by Kevin Gardner 凯文·加德纳(Kevin Gardner) 如何保持学习并成为更好的程序员 (How to keep learning and become ...

  4. python输出给定字符串中字母a出现的次数_[Python] 输出a字符串出现频率最高的字母,用到了list中的排序和Iambda...

    看到老王Python上的一篇有关Iambda的文章http://www.cnpythoner.com/post/140.html,其中提到一题目 - 输出a字符串出现频率最高的字母: 代码如下 1 a ...

  5. blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法

    晶闸管检测 晶闸管,俗称可控硅整流元件,晶闸管有单向晶闸管和双向晶闸管之分. 单向晶闸管 单向晶闸管有阳极A.阴极K和门级G三个电极,A接高电位,K接低电位.当G悬空或接地时,截止无电流流过,A.K间 ...

  6. ide怎么设置方法中间加一道横线_苹果手机怎么录屏_iPhone如何录屏_iOS录屏方法...

    将手机系统升级到iOS 11或更高版本(iOS 12)之后,很多人发现小伙伴的苹果手机上集成了录屏的功能,而自己的iPhone却怎么也找不到屏幕录制功能的开关在哪儿. 方法/步骤 1找到桌面上的设置图 ...

  7. python用户输入一个字符串、将下标为偶数_[Python]实验问题,python

    实验一: 1. 键盘输入三个整数,输出最大数的平方. a=eval(input("请输入三个整数:")) print(max(a)**2) 2. 键盘输入一个含有10个整数的列表, ...

  8. python编程在哪里写程序-教你如何编写、保存与运行Python程序的方法

    第一步 接下来我们将看见如何在 Python 中运行一个传统的"Hello World"程序.Python教程本章将会教你如何编写.保存与运行 Python 程序. 通过 Pyth ...

  9. 【方法】HTML网页调用本地Python程序

    欢迎支持个人chatgpt:https://chat.immuseai.com/register?promotion-code=pRE9p9DXCOBz3Z1s.注册即可使用GPT3.5和4.0. 代 ...

最新文章

  1. 0字符串 if mapper test_mybatis的if判断条件将字符串解析成了数字
  2. Seurat包分析单细胞转录组数据代码
  3. MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
  4. ESX VMFS文件系统浏览及修复软件部分免费发布
  5. Angualr6表单提交验证并跳转
  6. linux 内核 struct file 获取文件名 全路径
  7. js判断字符串包含某个字符_python str 字符串的逻辑判断用法
  8. vue表单的基本使用
  9. [Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)
  10. shell命令查阅端口信息_linux运维实用的42个常用命令总结
  11. (译)如何使用GameCenter制作一个简单的多人游戏教程:第一部分
  12. DOM(一):节点层次-Node类型
  13. 10.27T1 堆贪心
  14. windows安装numpy库
  15. 机器学习(周志华)学习笔记(二)
  16. 激光雷达工作原理简介
  17. 微博之争,没有硝烟的互联网战争
  18. 解决Windows x86网易云音乐不能将音乐下载到SD卡的BUG
  19. 电脑系统下载,安全,纯净,原版,iso系统
  20. 技术人攻略访谈三十七-程显峰:IT病得有多重?技术圈交际花谈研发管理怪现状

热门文章

  1. JAVA 网络编程中TCP和UDP
  2. [Unity 学习] Unity 入门学习及第一个游戏
  3. python 的math函数库
  4. JavaScript递归函数的几种写法
  5. 手握13本书、老司机超出120年经验的公众号
  6. vue -- watermark水印添加方法
  7. 前端(h5)js监控手机电池状况(是否充电、剩余电量、剩余可用时间等等)
  8. sql注入之——SQLMap常见语句
  9. ST_Geometry 的关系函数
  10. HTML5+JavaScript调用摄像头拍照或者摄像