我需要从我的python脚本中运行一个jar文件,该文件必须满足某些实时要求(它是程序员)。
我目前正在做的是
import subprocess
process = subprocess.Popen(shlex.split("java programmer.jar"), stdout=subprocess.PIPE)
但是程序员会定期停止,如果我使用start /high java programmer.jar
手动启动该程序不会发生。所以我想以某种方式直接从我的python脚本中设置子进程的优先级。但是,如果使用上面的命令,则会得到FileNotFoundError
,因此Google告诉我必须使用shell=True
标志。那解决了我的问题,但是创建了一个新的容器,因为我现在将我的jar运行在另一个外壳中,所以我无法再解析stdout
采取某些措施所要做的事情。
所以有一种方法可以直接以更高的优先级运行subprocess
或重定向我在运行时创建的Shell的控制台输出
process = subprocess.Popen(shlex.split("java programmer.jar"), stdout=subprocess.PIPE, shell=True)
必须在Windows上运行
内核将线程调度为32 priority levels之一。基本优先级取决于相对于进程优先级类的线程优先级:
IDLE_PRIORITY_CLASS = 0x00000040
BELOW_NORMAL_PRIORITY_CLASS = 0x00004000
NORMAL_PRIORITY_CLASS = 0x00000020
ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000
HIGH_PRIORITY_CLASS = 0x00000080
REALTIME_PRIORITY_CLASS = 0x00000100
实时优先级类仅应在绝对必要时使用,并且仅用于短期操作。即使是高优先级的类也应谨慎使用。
可以通过dwCreationFlags
的CreateProcessW
参数设置进程的初始优先级。 Python的CreateProcessW
支持将此作为其subprocess.Popen
参数。为了方便起见,上述优先级常量为subprocess.Popen
,但是我们当然可以在以前的Python版本中使用这些标志值。