- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试检测安装程序何时从 Python 脚本中完成执行。具体来说,该应用程序是 Oracle 10gR2 数据库。目前我正在使用 Popen 的 subprocess 模块。理想情况下,我会简单地使用 wait() 方法等待安装完成执行,但是,记录的命令实际上会生成子进程来处理实际安装。以下是失败代码的一些示例代码:
import subprocess
OUI_DATABASE_10GR2_SUBPROCESS = ['sudo',
'-u',
'oracle',
os.path.join(DATABASE_10GR2_TMP_PATH,
'database',
'runInstaller'),
'-ignoreSysPrereqs',
'-silent',
'-noconfig',
'-responseFile '+ORACLE_DATABASE_10GR2_SILENT_RESPONSE]
oracle_subprocess = subprocess.Popen(OUI_DATABASE_10GR2_SUBPROCESS)
oracle_subprocess.wait()
这里有一个类似的问题:Killing a subprocess including its children from python ,但所选答案并未解决 child 问题,而是指示用户直接调用等待的应用程序。我正在寻找一个特定的解决方案,它将等待子进程的所有子进程。如果有未知数量的子流程怎么办?我将选择解决等待所有子进程完成的问题的答案。
更清楚地说明失败:子进程在 wait() 命令之后继续执行,因为该命令仅等待顶级进程(在本例中为“sudo”)。这是此问题中已知子进程的简单图表:Python 子进程模块 -> Sudo -> runInstaller -> java -> (unknown)
最佳答案
好的,这是一个只在 Unix 下有效的技巧。它类似于此问题的答案之一:Ensuring subprocesses are dead on exiting Python program .这个想法是创建一个新的过程组。然后您可以等待组中的所有进程终止。
pid = os.fork()
if pid == 0:
os.setpgrp()
oracle_subprocess = subprocess.Popen(OUI_DATABASE_10GR2_SUBPROCESS)
oracle_subprocess.wait()
os._exit(0)
else:
os.waitpid(-pid)
我还没有测试过这个。它创建了一个额外的子进程来成为进程组的领导者,但避免这种情况(我认为)要复杂得多。
我发现此网页也很有帮助。 http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/
关于Python:如何确定子进程子进程已全部运行完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6102535/
我搜索了很多东西,比如: How to show icon blinking on google map 但是根据这个我没有找到如何让通知图标闪烁 我想在这个上闪烁图标 int icon = R.d
我很想知道我是否可以删除或更改 android 在选项卡布局下方提供的类似 drop-shadow 的效果。 最佳答案 我一问这个问题,我就在另一个stackoverflow post中得到答案.无论
我必须通过 AlaramManager 调用我的 BroadcastReceiver。 为此,我所做的不起作用: AlarmActivity.java public class AlarmActivi
我正在尝试执行以下操作: CPU_COUNT=$(cat /proc/stat | grep -E "^cpu[[:digit:]]+ " | wc -l) let CPU_COUNT=CPU_COU
我是一名优秀的程序员,十分优秀!