У меня есть сценарий (упрощенный ниже), который инициирует другой процесс python. Я знаю имя процесса и PID для текущего и дочернего процессов.Python - завершение дочернего процесса или PID?
Когда я пытаюсь завершить дочерний процесс - пункт меню (2) - я получаю сообщение «локальная переменная py_process», на которую ссылаются перед назначением ».
Предложения о прекращении этого процесса? Является ли это проблемой с переменным охватом?
EDIT: Определено «py_process» как глобальный var внутри 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()
Спасибо, Кевин, вот что я подумал. Но моя первоначальная попытка состояла в том, чтобы объявить глобальный var извне exec_menu, что не помогло. Я не был уверен, что был на правильном пути до вашего ответа. Я переместил Global внутри exec_menu, и все довольны. - благодаря! –