【问题标题】:How to immediately kill Python script after running subprocess?运行子进程后如何立即杀死Python脚本?
【发布时间】:2018-07-05 19:39:09
【问题描述】:

我制作了一个使用subprocess.run() 播放视频文件的脚本。

import subprocess

DATA_DIR = 'path\\to\\video\\files'
MEDIA_PLAYER = 'path\\to\\my\\media-player'

# returns path of random video file
p = chooseOne(DATA_DIR)
print('playing {}'.format(p))

# runs chosen path
subprocess.run([MEDIA_PLAYER, p])

但我想在打开子子进程后立即终止运行此代码的 python 脚本。

这可能吗?如果没有,是否有另一种方法可以使用 Python 打开外部进程以允许脚本终止?

注意:我使用的是 Python v3.6

【问题讨论】:

    标签: python python-3.x subprocess


    【解决方案1】:

    不要使用subprocess.run;请改用os.execl。这会让您的媒体播放器替换当前进程中的 Python 代码,而不是开始一个新进程。

    os.execl(MEDIA_PLAYER, p)
    

    subprocess.run 实际上做了同样的事情,但先分叉,以便暂时有两个进程运行您的 Python 脚本;一方面,subprocess.run 不做任何其他事情就返回,让您的脚本继续。另一方面,它立即使用os.exec* 函数之一(有8 种不同的变体)来执行您的媒体播放器。在您的情况下,您只是希望第一个进程退出,所以省去分叉的工作,立即使用os.execl

    【讨论】:

    • 太棒了!因此,这实际上是在当前进程中替换了我的 python 代码,但是由于路径名称中的空格,路径无法正常运行。它采用路径字符串的最后一部分并将其作为文件路径添加到我的主目录中。知道如何解决这个问题吗?
    • 你是如何设置p的值的?
    • 感谢您的帮助,我实际上使用os.execv 成功了! See my other question 关于我如何设置p 的值。 p 代表视频文件的路径
    猜你喜欢
    • 1970-01-01
    • 2013-07-24
    • 2016-01-24
    • 2018-10-14
    • 2015-09-20
    • 2010-12-08
    • 1970-01-01
    • 2019-03-21
    • 2015-11-20
    相关资源
    最近更新 更多