python隐藏启动台_如何在Python中启动后台进程?

如何在Python中启动后台进程?

我正在尝试将shell脚本移植到更易读的python版本。 原始shell脚本在后台使用“&”启动多个进程(实用程序,监视器等)。 如何在python中实现相同的效果? 我希望这些进程不会在python脚本完成时死掉。 我确信它与守护进程的概念有某种关系,但我无法轻易找到如何做到这一点。

Artem asked 2019-03-01T10:26:16Z

6个解决方案

299 votes

虽然jkp的解决方案有效,但更新的处理方式(以及文档推荐的方式)是使用subprocess.Popen()模块。 对于简单的命令,它是等价的,但是如果你想做一些复杂的事情,它会提供更多选项。

案例示例:

import subprocess

subprocess.Popen(["rm","-r","some.file"])

这应该在后台运行subprocess.Popen()。 但要小心:subprocess.Popen()只在后台运行进程,如果python脚本中没有任何内容依赖于正在运行的命令的输出:

例如,以下命令不会在后台运行:

import subprocess

ls_output=subprocess.Popen(["ls", "-a"], stdout=subprocess.PIPE)

请参阅此处的文档。

另外,澄清一点:“背景”纯粹是一个shell概念:你可能想要的是产生一个新的过程。 我在这里使用“背景”来引用类似shell的背景行为,但是不要将其误认为实际存在于后台的进程。

Dan answered 2019-03-01T10:28:12Z

65 votes

注意:此答案比2009年发布时的答案要少。现在,在文档中建议使用其他答案中显示的os.P_NOWAIT模块

(请注意,子进程模块提供了更强大的工具来生成新进程并检索其结果;使用该模块比使用这些函数更好。)

如果您希望您的进程在后台启动,您可以使用os.P_NOWAIT并以与shell脚本相同的方式调用它,或者您可以使用spawn:

import os

os.spawnl(os.P_DETACH, 'some_long_running_command')

(或者,您可以尝试使用较不便携的os.P_NOWAIT标志)。

请参阅此处的文档。

jkp answered 2019-03-01T10:26:57Z

32 votes

您可能想要“如何在Python中调用外部命令”的答案。

最简单的方法是使用system函数,例如:

import os

os.system("some_command &")

基本上,无论您传递给system函数的任何内容都将执行,就像您在脚本中将其传递给shell一样。

Eli Courtwright answered 2019-03-01T10:28:54Z

23 votes

我在这里找到了这个:

在Windows(win xp)上,父进程将无法完成,直到DETACHED_PROCESS完成其工作。 这不是你想要的CGI脚本。 问题不是Python特有的,在PHP社区中问题是一样的。

解决方案是将DETACHED_PROCESS进程创建标志传递给win API中的基础CreateProcess函数。 如果你碰巧安装了pywin32,你可以从win32process模块导入标志,否则你应该自己定义:

DETACHED_PROCESS = 0x00000008

pid = subprocess.Popen([sys.executable, "longtask.py"],

creationflags=DETACHED_PROCESS).pid

f p answered 2019-03-01T10:29:43Z

15 votes

使用subprocess.Popen()和close_fds=True参数,这将允许生成的子进程与Python进程本身分离,并在Python退出后继续运行。

[https://gist.github.com/yinjimmy/d6ad0742d03d54518e9f]

import os, time, sys, subprocess

if len(sys.argv) == 2:

time.sleep(5)

print 'track end'

if sys.platform == 'darwin':

subprocess.Popen(['say', 'hello'])

else:

print 'main begin'

subprocess.Popen(['python', os.path.realpath(__file__), '0'], close_fds=True)

print 'main end'

Jimmy Yin answered 2019-03-01T10:30:25Z

11 votes

您可能希望开始调查os模块以分叉不同的线程(通过打开交互式会话并发出帮助(os))。 相关函数是fork和任何exec函数。 为了让你了解如何启动,在执行fork的函数中放入这样的东西(函数需要将列表或元组'args'作为包含程序名称及其参数的参数;您可能还需要 为新线程定义stdin,out和err):

try:

pid = os.fork()

except OSError, e:

## some debug output

sys.exit(1)

if pid == 0:

## eventually use os.putenv(..) to set environment variables

## os.execv strips of args[0] for the arguments

os.execv(args[0], args)

Gerald Senarclens de Grancy answered 2019-03-01T10:30:53Z

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML+CSS+JS实现 ❤️swiper倾斜图片特效❤️

效果演示: 代码目录: 主要代码实现: CSS样式: .img_swiper {width: 800px;margin: 0 auto;position: relative; }.img {width: 100%;height: 100%; }.img_swiper .swiper-button-prev {width: 40px;height: 40px;background-im…

如何将c语言程序封装供python调用_C++调用python

C调用python在C/C中嵌入Python,可以使用Python提供的强大功能,通过嵌入Python可以替代动态链接库形式的接口,这样可以方便地根据需要修改脚本代码,而不用重新编译链接二进制的动态链接库。至少你可以把它当成文本形式的动态链接库…

HTML+CSS+JS实现 ❤️touchSlider图片滚动图片轮播❤️

效果演示: 代码目录: 主要代码实现: CSS样式: charset "utf-8"; * {margin: 0;padding: 0;list-style: none;border: 0; }body {width: 100%;margin: 0 auto;overflow: hidden }/* main_image */.main_visual {heigh…

win10配置mysql8.0_Win10下mysql 8.0.20 安装配置方法图文教程

Win10系统下MySQL 8.0.20安装和配置超详细教程MySQL下载MySQL直接去官网下载就行,选择community版本(免费)下载,链接。在select operating system中选择Microsoft Windows,下方对应出现最新版本的MySQL,目前是MySQL 8.0.20&#x…

HTML+CSS+JS实现 ❤️echarts省市区地图城市选择❤️

效果演示: 代码目录: 主要代码实现: CSS样式: * {margin: 0;padding: 0; }body {font-family: Exo, -apple-system, Open Sans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Hiragino Sans GB, Microsoft YaH…

基于SpringBoot+mybatis+layui就业管理系统设计和实现

🍅 作者主页:Java李杨勇 🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我,都给你】 🍅 欢迎点赞 👍 收藏 ⭐留言 &#x1f…

java集合清空_java 集合删除数据

public static void main(String[] args) {List list new ArrayList<>(Arrays.asList(1, 2, 3, 4));// 常规删除// list.removeIf(next -> next 3);Iterator iterator list.iterator();while (iterator.hasNext()) {// Integer next iterator.next();// 当不执行 …

HTML+CSS+JS实现 ❤️图片轮播幻灯片❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; font-face {font-weight: normal;font-style: normal; }.csslider1 {display: inline-block;position: relative;max-width: 833px;width: 100%;margin-top: 10px; }.…

single java_java single Pattern 单例模式

单例模式是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它涉及到一个单一的类&#xff0c;该类自己负责创建自己的对象并且确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式&#xff0c;可以直接访问&#xff0c;不需要实例化…

HTML+CSS+JS实现 ❤️ html5响应式图片轮播❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; .flickerplate {position: relative;width: 100%;height: 600px;background-color: #e6e6e6;overflow: hidden }.flickerplate ul.flicks {width: 10000%;height: 100…

php time java_java 时间戳和PHP时间戳 的转换 php time()

最近在弄discuz,数据库mysql,时间类型int 10总结一下java 时间戳和PHP时间戳 的转换问题&#xff1a;由于精度不同&#xff0c;导致长度不一致&#xff0c;直接转换错误。JAVA时间戳长度是13位&#xff0c;如&#xff1a;1294890876859PHP时间戳长度是10位&#xff0c; 如&…

HTML+CSS+JS实现 ❤️HTML5图片幻灯片轮播切换❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html> <html><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

HTML+CSS+JS实现echarts图表炫光分布地图动画

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <html lang"en"><head><meta charset"utf-8"><title>ECharts</title> </head><body style"background:#1B1…

java jndi使用_java – 使用JNDI进行数据库连接

那么,它是一个客户端应用程序&#xff1f;应用程序和数据库通常使用DriverManager#getConnection()获得的连接相互通信&#xff1f;如果是这样,那么您不一定需要JNDI才能使连接池工作.单独的连接池框架已经足够了.例如C3P0或Apache Commons DBCP(我建议使用C3P0; DBCP是单线程的…

HTML+CSS+JS实现 ❤️echarts企业地区大数据图表模板❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; CSS样式&#xff1a; body, ul, li, p, h1, h2, h3, h4, h5, h6, dl, dt, dd {margin: 0;padding: 0; }ul, li {list-style: none; }a:link, a:visited, a:active {text-decoration: none; …

HTML+CSS+JS实现 ❤️echarts大数据统计图表实例❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"Generator" content"EditPlus"…

2014 java面试题_2014 java面试题 (答案)

2014 java面试题 (答案)题目一、选择题1. 如下代码&#xff1a;class Super {public Integer getLenght() { return new Integer(4); }}public class Sub extends Super {public Long getLenght() { return new Long(5); }public static void main(String[] args) {Super soope…

HTML+CSS+JS实现 ❤️3D万花筒图片相册展示特效❤️

效果演示&#xff1a; 文末获取源码 代码目录&#xff1a; 主要代码实现&#xff1a; HTML代码 : <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns&q…

java aio socket_java核心学习(三十三) 网络编程---AIO实现异步Socket通信

AIO需要操作系统的支持&#xff0c;在linux内核2.6版本中加入了对真正异步IO的支持&#xff0c;java从jdk1.7开始支持AIO核心类有AsynchronousSocketChannel 、AsynchronousServerSocketChannel、AsynchronousChannelGroup前两个个类是javaAIO为TCP通信提供的异步Channel。看名…

HTML+CSS+JS实现 ❤️简单的翻纸牌记忆游戏❤️

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…