我对以下代码有疑问。
def play():
process = "......"
h=subprocess.Popen(process)
def stop():
h.terminate()
它表示不能执行此操作,因为未定义h。这是因为它不是全球性的,如果是的话,我如何使其成为全球性的以便它可以找到它。我尝试在程序开始时使用global
来定义变量h
,但是它不起作用。
谢谢
答案 0 :(得分:0)
如果您做了这样的事情:
h = placeholdervalue
def play():
process = "......"
h=subprocess.Popen(process)
def stop():
h.terminate()
然后h
和play
只会隐藏全局定义,而不会覆盖全局定义(这不是参考)。
我会说最好不要使用全局变量:
def manager():
//Do interesting stuff
h = play()
//Some more stuff
stop(h) //Only need a stop function if you need more cleanup. Otherwise terminate immediately
def play():
process = "......"
return subprocess.Popen(process)
def stop(aproc):
aproc.terminate()
更容易扩展和更安全。
答案 1 :(得分:0)
这在函数h
的范围内定义了一个名为play
的变量:
def play():
process = "......"
h=subprocess.Popen(process)
在函数h
的范围内没有名为stop
的变量,因此失败:
def stop():
h.terminate()
不知何故,h
必须发送到stop
。我看到两种方式。
第一个选项,play
返回h
,stop
接收i作为自变量(如kabanus' answer)
第二个选项,创建一个类:
class Player:
def __init__(self):
self.process = None
def play(self):
assert self.process is None, "Already playing"
self.process = subprocess.Popen("...")
def stop(self):
assert self.process is not None, "Not playing"
self.process.terminate()
self.process = None