Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python代码中获取ProcessId_Python - Fatal编程技术网

在Python代码中获取ProcessId

在Python代码中获取ProcessId,python,Python,我在Windows中,假设我有一个主python代码,在命令行中调用python解释器来执行另一个python脚本,比如test.py 因此test.py是作为一个新进程执行的。如何在Python中找到这个进程的processId 更新: 更具体地说,os模块中有os.getpid()。它返回当前进程id 如果我有一个主程序运行Python解释器来运行另一个脚本,那么如何获取该执行脚本的进程Id?如果使用subprocess生成shell,则可以在属性中找到进程Id: sp = subproce

我在Windows中,假设我有一个主python代码,在命令行中调用python解释器来执行另一个python脚本,比如test.py

因此test.py是作为一个新进程执行的。如何在Python中找到这个进程的processId

更新:

更具体地说,os模块中有os.getpid()。它返回当前进程id


如果我有一个主程序运行Python解释器来运行另一个脚本,那么如何获取该执行脚本的进程Id?

如果使用subprocess生成shell,则可以在属性中找到进程Id:

sp = subprocess.Popen(['python', 'script.py'])
print('PID is ' + str(sp.pid))
p = multiprocessing.Process()
p.start()
# Some time later ...
print('PID is ' + str(p.pid))
如果使用多处理,请使用其属性:

sp = subprocess.Popen(['python', 'script.py'])
print('PID is ' + str(sp.pid))
p = multiprocessing.Process()
p.start()
# Some time later ...
print('PID is ' + str(p.pid))

这完全取决于您如何启动第二个流程

如果您使用的是
os.system
或类似的工具,那么该调用将不会报告有关子进程pid的任何有用信息。一种选择是让第二个脚本通过stdin/stdout将
os.getpid()
的结果传回原始进程,或者将其写入预定的文件位置。另一种选择是使用第三方库来确定它是哪个进程


另一方面,如果使用
子流程
模块启动脚本,则生成的“popen”对象具有一个属性,该属性将为您提供进程id。

您将在创建新创建的进程时收到该进程的进程id。至少,如果您使用fork()(Unix)、posix_spawn()、CreateProcess()(Win32)或任何其他合理的机制来创建它,您将看到它


如果您调用“python”二进制文件,那么pythonpid将是您调用的该二进制文件的PID。它不会为自己创建另一个子进程(除非python代码这样做)。

另一个选项是,您执行的进程将为自己设置控制台窗口标题。
搜索过程将枚举所有窗口,按名称查找相关窗口句柄,并使用句柄查找PID。它使用ctypes在windows上工作。

如果您知道一次只运行一个test.py实例,您可以在开始时写入一个test.pid文件,该文件只包含运行test.pyMark的进程Id。我没有收到您的上一条语句。请详细说明一下?假设伪代码是这样的:main.py命令行(Python testScript.py)//非阻塞您说test.py和Python解释器都将具有相同的进程Id?这是有道理的。可能误解了你的问题;我假设您正在从其他语言调用python。我不确定我的回答是否有意义。