【问题标题】:Bash to python script conversionBash 到 python 脚本的转换
【发布时间】:2019-01-21 22:36:16
【问题描述】:

我有一个 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.."

谢谢。

【问题讨论】:

  • “它不起作用”是什么意思?请更具体。
  • 对不起,我的意思是我的 for 循环和 if 语句中的条件有问题
  • for disk in "/dev/sd*": 迭代给定字符串的字母。您应该使用glob()os.walk() 来枚举目录。

标签: python bash usb usb-drive converters


【解决方案1】:

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

for disk in "/dev/sd*" :

您正在逐个字符地遍历字符串,就像列表 ['/','d','e','v','/','s','d','*'] 中一样

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

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

if detect == '*USB' :

或用于字符串包含:

if '*USB' in detect:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2020-01-08
    • 2022-10-23
    相关资源
    最近更新 更多