Python 首先从进程中获取PID

Python 首先从进程中获取PID,python,Python,我有一个问题,关于如何首先从流程中获取PID,而不是在流程完成时 这是因为我希望能够在必要时终止FFmpeg进程(而不是python脚本),因此在最后知道它的PID是没有意义的 仅供参考:此脚本正在从FFmpeg进程获取PID 下面您将看到我是如何编写这个脚本的,它工作得很好,但正如我前面提到的,我在最后得到了PID 你知道怎么做吗 import json, base64, sys, subprocess thisList = json.loads(base64.b64decode(sys.a

我有一个问题,关于如何首先从流程中获取PID,而不是在流程完成时

这是因为我希望能够在必要时终止FFmpeg进程(而不是python脚本),因此在最后知道它的PID是没有意义的

仅供参考:此脚本正在从FFmpeg进程获取PID

下面您将看到我是如何编写这个脚本的,它工作得很好,但正如我前面提到的,我在最后得到了PID

你知道怎么做吗

import json, base64, sys, subprocess

thisList = json.loads(base64.b64decode(sys.argv[1]))
logFileName = json.loads(base64.b64decode(sys.argv[2]))

p = subprocess.Popen(thisList, stderr = open(logFileName, 'w'))
print(p.pid)
如您所见,我正在解码编码的base64字符串(FFmpeg命令行)以保护它,因为它来自URL

另外,我需要将FFmpeg输出写入一个文件,所以我要让stderr从外部写入它。我也用base64编码了它的路径

最后要提到的是,将有许多并发的FFmpeg-PID同时工作,因此使用FFmpeg名称搜索PID之类的东西太通用了

可以启动第二个脚本来搜索FFmpeg的整个命令行并获取其PID,这在Unix中可以很好地工作(我已经有了一个用PHP实现的脚本),但在Windows中不行。我希望两者都能兼容,所以

在Unix中工作的PHP脚本是

function getPidByCommand($myString)
{
    $pid = 0;
    $myString = str_replace('"', '', $myString);
    exec("ps aux | grep \"${myString}\" | grep -v grep | awk '{ print $2 }' | head -1", $out);
    if (isset($out[0]))
    {
        $pid = intval($out[0]);
    }
    return $pid;
}
事先非常感谢


Mapg

在脚本开始时尝试导入os print('My PID is:',os.getpid()),是否确定?这可以从python脚本而不是从FFmpeg获取PID。我想杀死FFmpeg,而不是脚本。啊,也许不是,但我从来没有尝试过在它打开时杀死FFmpeg,因为一旦我这样做了,脚本本身对我来说就变得毫无用处。可能我需要在后台创建一种进程,而我首先得到PID(或父PID)。如果进程花费的时间比预期的长,我尝试让用户自由地终止FFmpeg。如果您使用UNIX并将手动终止子进程,那么快速修复方法可以是运行类似于:ps aux | grep FFmpeg的程序。尽管如此,我相信在子流程文档中一定有解决方案。