我正在编写一个python脚本,当给定/starttest1命令时,它会打开另一个python脚本,当命令为/stoptest1时,我想关闭它
我试过用终止Popen.terminate()但它给了我一个错误
if command == '/starttest1':
extProc = sp.Popen(['python','haha.py'])
elif command == '/stoptest1':
sp.Popen.terminate(extProc)
print("haha.py has been closed")
我遇到的错误: UnboundLocalError:赋值前引用了局部变量“extProc”
我想要的结果是哈哈正在关闭并打印“哈哈“已关闭”
tl,dr:条件块并不重要。它们没有自己的名称空间,因此该异常还有其他原因
Python的条件块没有单独的名称空间。您可以访问条件块中定义的任何变量,就像它们是在常规程序流中定义的一样。如果条件没有命中,并且您试图访问一个变量,那么解释器将引发NameError。所以你可以这么做:
根据使用脚本的用户的不同,您可能希望为extProc不存在的情况添加一些处理,但是当复制粘贴到Python控制台时,上面的代码确实会运行,如果按正确的顺序使用,则不会引发任何异常。我认为您的问题在于调用此代码的方式,因为您肯定不会将其复制到控制台。你知道吗
你可以尝试我所说的“Java方式”,然后编写一个类。这不是什么Pythonic,但它在代码周围创建了一个名称空间,并允许进行如下简单的条件检查:
不过,不要在productive代码中使用这种方法(实际上,永远不要只使用
__init__
以外的方法编写类),但这是一种确保条件不是问题所在的方法。每次输入新命令时是否启动脚本?在这种情况下,没有办法保留参考资料。您应该考虑使用input
函数来获取新命令并保留引用。据我所知,唯一的其他方法是处理低级别操作系统调用,但这可能不是您想要的。你知道吗您应该为控制进程创建新线程,例如:
这不是最好的例子,但至少要注意其中的含义。你知道吗
相关问题 更多 >
编程相关推荐