如何在python脚本和子流程之间切换pid?
我使用子流程启动应用程序,然后使用Python脚本分析输出。这个Python脚本是由我无法控制的第三方软件执行的。第三方软件测量CPU使用情况,它通过Python脚本测量CPU使用情况,而不是通过子流程启动的应用程序,这正是我实际需要的 事实证明,如果我使用bash的如何在python脚本和子流程之间切换pid?,python,python-2.7,Python,Python 2.7,我使用子流程启动应用程序,然后使用Python脚本分析输出。这个Python脚本是由我无法控制的第三方软件执行的。第三方软件测量CPU使用情况,它通过Python脚本测量CPU使用情况,而不是通过子流程启动的应用程序,这正是我实际需要的 事实证明,如果我使用bash的exec而不是subprocess启动应用程序,Python脚本的PID将与应用程序的PID相同,并且将测量应用程序的CPU使用率(这是我想要的)。但是,我将无法分析输出 我如何才能分析应用程序的输出,并让第三方软件测量应用程序(而
exec
而不是subprocess
启动应用程序,Python脚本的PID将与应用程序的PID相同,并且将测量应用程序的CPU使用率(这是我想要的)。但是,我将无法分析输出
我如何才能分析应用程序的输出,并让第三方软件测量应用程序(而不是Python脚本)的CPU使用率?
我想我必须在Python脚本和子流程之间切换PID。这能做到吗?
还有其他解决这个问题的办法吗
这在CentOS 6和Windows 7上都使用Python 2.7
这就是我到目前为止所做的:
import sys, os, subprocess
# Command
command = [Render, '/path/to/file']
# Launch subprocess
p = subprocess.Popen( command, stdout=subprocess.PIPE, stderr=subprocess.STDOUT )
# PIDs
script_pid = os.getpid()
app_pid = p.pid
# Analyze the app's output
for line in iter(p.stdout.readline, b''):
sys.stdout.flush()
print(">>> " + line.rstrip())
当执行另一个进程时,只需将stdout重定向到某个地方:
import io
import sys
sys.stdout = io.StringIO() # or BytesIO
exec the_command
output = sys.stdout.getvalue()
sys.stdout = sys.__stdout__
顺便说一句,你对iter的使用是无用的。做:
for line in iter(file_object.readline, ''):
与以下内容完全相同:
for line in file_object:
除了:
- 它的可读性较差
- 它更长
- 它增加了开销,因为您要对每一行执行比较
n
字节为单位读取文件:
for chunk in iter(lambda: file_object.read(n), ''):
我相信文档使用了蹩脚的
iter(f.readline.)
示例,因为它早于对文件的可移植支持,所以,在当时,这是逐行读取文件的最佳方式。您可能无法像这样处理它(进程ID在大多数操作系统上是不可切换的)。然而,如果你说你正在使用的外部工具是什么,或者你需要什么样的分析输出,那么有人可能会帮助你找到解决方案。