Python - 终止子进程或PID?

时间:2015-06-15 18:35:51

标签: python-2.7

我有一个脚本(下面简化)启动另一个python进程。我知道当前和子进程的进程名称和PID。

当我尝试终止子进程 - 菜单选项(2)时 - 我在赋值之前得到消息“局部变量'py_process'。”

终止此过程的建议?这是一个变量范围问题吗?

编辑:将'py_process'定义为exec_menu()中的全局变量。 : - )

#!/usr/bin/env python

import os, sys
import subprocess

## Path Variables ##
pyTivoPath="c:\pyTivo\pyTivo.py"

def clear_screen():
    os.system('cls' if os.name == 'nt' else 'clear')

## Main Menu ##
def main_menu():
    print "\nmyPID: %d\n" % (os.getpid())
    print "1. Start pyTivo"
    print "2. Stop pyTivo"
    choice=raw_input ("\nSelect: ")
    exec_menu(choice)
    return

## Menu Action ##
def exec_menu(choice):
    gobal py_process
    if choice=="1":
        print "\nStarting pyTivo..."
        from subprocess import Popen, PIPE, STDOUT
        py_process = subprocess.Popen(pyTivoPath, shell=True, stdout=PIPE, stderr=subprocess.STDOUT)
        newPID=py_process.pid
        print "newPID: %d" % (newPID)
    elif choice=="2":
        print "stopping pyTivo"
        py_process.terminate()
    else:
        exit()
    return

## Main Loop ## 
main_menu()

raw_input("\nPress Enter to continue...")
main_menu()

1 个答案:

答案 0 :(得分:1)

是的,它是一个变量范围问题。

py_process在您后续的exec_menu调用中不存在(在choice=='1'中设置之后)。

将其设为全局,然后在您想要停止时可用。