python - 如何将消息从客户端发送到服务器套接字
问题描述
您好我正在尝试检测 USB 是否连接到客户端。我的逻辑是,如果添加新磁盘意味着在客户端上添加新设备,如果从客户端删除 USB 意味着设备已从客户端删除,则获取磁盘总数,所以我继续循环检查客户端显示总计 = 1 或总计 = 2 , 1 表示只有 1 个磁盘可用 2 表示添加了新设备,依此类推。它工作正常,但sock.send("Device Added in " + username) sock.send("Device remove in " + username)
这些命令不起作用,如果我从客户端插入或拔出 USB,我不会在服务器端收到这些消息。我不确定我的if else
条件是否正确。
操作系统linux
这是客户端代码
from socket import *
import os, string, time
import getpass
host = 'localhost'
port = 52000
username = getpass.getuser()
sock = socket()
# Connecting to socket
sock.connect((host, port)) # Connect takes tuple of host and port
def detect_device(previous):
total = os.system(' lsblk | grep disk | wc -l')
time.sleep(3)
# if conditon if new device add
if total<previous:
sock.send("Device Added in " + username)
# if no new device add or remove
elif total==previous:
detect_device(previous)
# if device remove
else:
sock.send("Device Removed in " + username)
# Infinite loop to keep client running.
while True:
data = sock.recv(1024)
if (data == 'Hi'):
while True:
detect_device(os.system(' lsblk | grep disk | wc -l'))
sock.close()
我在客户端得到的输出是
1 1 1 2 2 2 2 1 1
1 表示当前磁盘总数为 1 如果我插入 USB,则磁盘总数为 2 然后 1 表示我断开 USB
解决方案
好的,我修复了 os.system 在输出中返回 0,所以我用 subprocess.run 尝试它,它运行良好。
推荐阅读
- android - SwipeRefreshLayout 不显示任何内容且无法刷新某些内容
- java - 不存在类型变量 V 的实例,因此 ExpectedCondition
符合功能 - java - 如何在java中增加二维数组的大小?
- javascript - 具有背景 AJAX 更新的 D3 图形:无法重绘图形
- ansible - 在 ansible playbook 中运行带有 start 参数的 autosys 命令
- r - ggplot2图例标签没有改变
- c# - 为什么将连接字符串添加到代码后会出现错误?
- javascript - jQuery获取有关更改问题的div文本
- python - 为什么 'a' > 'A' 在 Python 中的计算结果为 True?
- php - 为什么这段代码需要很长时间才能执行?