python - Bash 到 python 脚本的转换
问题描述
我有一个 bash 脚本来检测连接在 USB 中的硬盘。我想将其转换为 python 脚本以将其用于 SSH 连接。
#!/bin/bash
for disk in /dev/sd?
do
detect=$(udevadm info $disk | grep USB)
if [[ "$detect" == *USB ]]; then
echo "$disk is a USBDISK.."
fi
done
我试过了,但它不起作用。我对 for 循环和 if 语句中的条件有疑问:
import paramiko
for disk in "/dev/sd*" :
CMD = 'udevadm info %s | grep USB' % disk
stdin, stdout, stderr = client.exec_command(CMD, get_pty = True)
detect = stdout.read()
if detect == '*USB' :
print "disk is a USBDISK.."
谢谢。
解决方案
正如 Selcuk 所提到的,您循环的是一个字符串,而不是文件夹的内容。当你这样做时:
for disk in "/dev/sd*" :
您正在按列表中的字符循环遍历字符串['/','d','e','v','/','s','d','*']
在引用字符串和路径时,Python 的工作方式与 bash 不同。看看ghostdog74的这个答案,看看如何遍历目录内容。
这可以解决if
条件问题。作为建议,您可以考虑是否要检查以下条件: 确切字符串:
if detect == '*USB' :
或用于字符串包含:
if '*USB' in detect:
推荐阅读
- docker - 使用 FluentD 将访问日志与应用程序日志分开
- powershell - 为什么不为可选参数分配位置?电源外壳
- c++ - R 值参考 C++ 事实检查
- python - 使用 Pandas 样式(DataFrame.style 属性)迭代产品价格
- django - 如何在模板中显示 django 模型的某些字段?
- linux - Dockerfile 在一个阶段从源代码构建,然后在第二阶段复制和安装
- python - 如何使用 df 数据集中的“关闭”值打印每周的曲线
- json - 将json数组编码到客户端
- python - 尽管有 dropout 层,CNN 仍然存在高度过拟合?
- python - Python discord bot如何将消息与列表进行比较