首页 > 解决方案 > 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.."

谢谢。

标签: pythonbashusbusb-driveconverters

解决方案


正如 Selcuk 所提到的,您循环的是一个字符串,而不是文件夹的内容。当你这样做时:

for disk in "/dev/sd*" :

您正在按列表中的字符循环遍历字符串['/','d','e','v','/','s','d','*']

在引用字符串和路径时,Python 的工作方式与 bash 不同。看看ghostdog74的这个答案,看看如何遍历目录内容。

这可以解决if条件问题。作为建议,您可以考虑是否要检查以下条件: 确切字符串:

if detect == '*USB' :

或用于字符串包含:

if '*USB' in detect:

推荐阅读