现有流程的Python命令行参数

时间:2011-08-04 23:50:39

标签: python linux process arguments

我正在尝试使用cpulimit编写一个脚本来控制VM n KVM的CPU使用率。使用cpulimit,我可以使用pid 2112来限制VM的CPU使用率:

  

./ cpulimit -p 2112 -l 50.

我想写一个可以打开界面的脚本

  

setcpu(vm_pid,limit)

可以多次调用,我不会覆盖现有的限制。我可以通过添加限制值作为运行cpulimit进程的运行时参数来覆盖现有限制。像subprocess.Popen(...,stdin = subprocess.PIPE)。我对如何获取正在运行的进程并提供运行时参数感到困惑。例如(没有脚本):

  

#。/ dotulimit -p 2112 -l 50

 Process 2112 detected 

现在它将为流程设置上限,现在我可以直接输入

  

40

     

80

覆盖现有限制。我想编写这种行为的脚本。如果你能提供关于如何编写这个脚本的指针或想法,那将是很棒的。非常感谢

  • Sethu

2 个答案:

答案 0 :(得分:1)

修改:如果您需要与现有的cpulimit对话,您应该查看How to write data to existing process's STDIN from external process?

的已接受答案

基本上,做

(while [ 1 ]; do sleep 1; done) | ./cpulimit -p 2112 -l 50.

当你启动cpulimit时,因为它的输入需要是一个管道。

然后,从Python写入/proc/{pid_of_cpulimit}/fd/0


如果您使用

生成了一个流程
process = subprocess.Popen(['./cpulimit', '-p', '2112', '-l', '50'], stdin=subprocess.PIPE)

只是做

process.communicate(input='40')
process.communicate(input='80')

答案 1 :(得分:0)

打开像agf节目这样的子流程,不要忘记指定管道stdin

import subprocess
p = subprocess.Popen("./cpulimit -p 2112 -l 50", stdin=subprocess.PIPE)

然后写信给p.stdin

p.stdin.write("40\n")
p.stdin.flush()