Python 表示 paramiko 客户端未在函数中定义,函数已经 运行 成功一次
Python says paramiko client is not defined in function after function already run succesfully once
我正在使用 Paramiko 和 Pyqt 制作脚本管理器。当我的程序启动时,我连接到我的 raspberry pi 和 运行 函数 get_proc() 成功执行并在我的 pi 上打印出所有 运行ning 进程作为证据。然后我有一个按钮,按下时执行函数 dump_start_click,它使用 get_proc() 的 return 作为其逻辑。按下按钮时,我得到 NameError: 'client is not defined
。我从不 运行 client.close()。如果我在主语句下连续多次使用 get_proc(),它们都可以完美执行,但从另一个函数调用它会失败。有什么想法吗?
def dump_start_click():
if get_proc() == 'offline':
ssh_log("Starting Dump 1090")
stdin, stdout, stderr = client.exec_command('/home/pi/dump1090/./dump1090 --quiet --net')
stdin.close()
stdout.close()
stderr.close()
time.sleep(1)
proc_id = get_proc()
if proc_id != 'failed':
ssh_log("Dump 1090 started successfully")
ssh_log("Process id : " + proc_id)
else:
ssh_log('Dump 1090 is already running!')
def get_proc():
stdin, stdout, stderr = client.exec_command('ps aux')
x = stdout.read().decode("utf8")
print(x)
dump_proc = []
for line in x.split('\n'):
if 'dump1090' in line:
buff = line.split(' ')
for j in buff:
if j != '':
dump_proc.append(j)
if len(dump_proc) == 0:
return 'offline'
return dump_proc[1]
if __name__ == "__main__":
client = SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy)
client.load_system_host_keys()
# Known_host policy
client.set_missing_host_key_policy(AutoAddPolicy())
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = control_ui(MainWindow)
MainWindow.show()
try:
ssh_log("Connecting to Pi...")
client.connect('192.168.0.29', username='pi', password='redacted')
except:
ssh_log("SSH Connection Failed")
ssh_log("Connected!")
get_proc()
win32api.SetConsoleCtrlHandler(on_exit, True)
try:
pretty.install()
ssh_connect()
except KeyboardInterrupt:
on_exit(True)
app.exec_()
我认为问题和区别在于您 运行 get_proc()
通过执行此脚本。并且您正在尝试从导入它的另一个模块 运行 dump_start_click()
。问题是当您在其他地方导入 dump_start_click
时,if __name__ == "__main__":
中的代码未执行,因此未定义 client
。如果您从 if __name__ == "__main__":
中提取 client
创建行,它应该可以工作。
并检查 this question 了解更多信息。
我正在使用 Paramiko 和 Pyqt 制作脚本管理器。当我的程序启动时,我连接到我的 raspberry pi 和 运行 函数 get_proc() 成功执行并在我的 pi 上打印出所有 运行ning 进程作为证据。然后我有一个按钮,按下时执行函数 dump_start_click,它使用 get_proc() 的 return 作为其逻辑。按下按钮时,我得到 NameError: 'client is not defined
。我从不 运行 client.close()。如果我在主语句下连续多次使用 get_proc(),它们都可以完美执行,但从另一个函数调用它会失败。有什么想法吗?
def dump_start_click():
if get_proc() == 'offline':
ssh_log("Starting Dump 1090")
stdin, stdout, stderr = client.exec_command('/home/pi/dump1090/./dump1090 --quiet --net')
stdin.close()
stdout.close()
stderr.close()
time.sleep(1)
proc_id = get_proc()
if proc_id != 'failed':
ssh_log("Dump 1090 started successfully")
ssh_log("Process id : " + proc_id)
else:
ssh_log('Dump 1090 is already running!')
def get_proc():
stdin, stdout, stderr = client.exec_command('ps aux')
x = stdout.read().decode("utf8")
print(x)
dump_proc = []
for line in x.split('\n'):
if 'dump1090' in line:
buff = line.split(' ')
for j in buff:
if j != '':
dump_proc.append(j)
if len(dump_proc) == 0:
return 'offline'
return dump_proc[1]
if __name__ == "__main__":
client = SSHClient()
client.set_missing_host_key_policy(AutoAddPolicy)
client.load_system_host_keys()
# Known_host policy
client.set_missing_host_key_policy(AutoAddPolicy())
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = control_ui(MainWindow)
MainWindow.show()
try:
ssh_log("Connecting to Pi...")
client.connect('192.168.0.29', username='pi', password='redacted')
except:
ssh_log("SSH Connection Failed")
ssh_log("Connected!")
get_proc()
win32api.SetConsoleCtrlHandler(on_exit, True)
try:
pretty.install()
ssh_connect()
except KeyboardInterrupt:
on_exit(True)
app.exec_()
我认为问题和区别在于您 运行 get_proc()
通过执行此脚本。并且您正在尝试从导入它的另一个模块 运行 dump_start_click()
。问题是当您在其他地方导入 dump_start_click
时,if __name__ == "__main__":
中的代码未执行,因此未定义 client
。如果您从 if __name__ == "__main__":
中提取 client
创建行,它应该可以工作。
并检查 this question 了解更多信息。