如何在python中编写一个可以启动和终止子进程的函数??在
这是我目前为止的代码:
import subprocess
import signal
import time
def myfunction(action):
if action == 'start':
print 'Start subrocess'
process = subprocess.Popen("ping google.com", shell=True)
if action == 'stop':
print 'Stop subrocess'
process.send_signal(signal.SIGINT)
myfunction('start')
time.sleep(10)
myfunction('stop')
当我运行这段代码时,我得到一个错误:
^{pr2}$
你需要学习OOP并用构造函数和析构函数定义MyClass。 假设您不需要运行进程的许多副本,并且为了使它更加奇特,我们可以使用类方法
这并不理想,因为它允许您创建多个新流程。 在这种情况下,常常使用singleton模式,这样可以确保只有一个进程在运行,但它有点过时。在
最小的解决方法(保留myfunction)是将进程保存在变量中:
^{pr2}$您遇到的问题似乎是由于
process
被声明为myfunction
中的局部变量,尤其是仅在'start'
if语句中。这个小范围意味着当您调用myfunction('stop')
时,函数没有“process”变量的概念。在有几种方法可以解决这个问题,但最直观的方法是},并在您想要关闭它时将其作为参数。代码看起来像:
myfunction
在生成一个时返回{我刚跑完这一关就好了
您需要保存子流程变量并将其传递到函数中。当您调用
myfunction('stop')
时,函数作用域没有地方可以从中获得process
(因此是UnboundLocalError
)。在如果没有函数作用域,这应该可以很好地工作-这表明您的问题与函数范围有关,而不是与过程处理有关:
相关问题 更多 >
编程相关推荐