在Python代码中获取ProcessId
我在Windows中,假设我有一个主python代码,在命令行中调用python解释器来执行另一个python脚本,比如test.py 因此test.py是作为一个新进程执行的。如何在Python中找到这个进程的processId 更新: 更具体地说,os模块中有os.getpid()。它返回当前进程id在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
如果我有一个主程序运行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。我不确定我的回答是否有意义。