如何将bash转换为python3?

时间:2019-12-05 11:52:43

标签: python bash

如何使用标准库(不添加paramiko等)将此bash脚本转换为python3:

   for ((i=1; i<50; i++)); do ssh BF-c${i}nl 'hostname; free -h; uname -a;';

2 个答案:

答案 0 :(得分:2)

match[3]

Python3.6>

import os

for i in range(1, 50):
    env_var = os.environ[f'{i}nl']
    os.system(f"ssh BF-c{env_var} 'hostname; free -h; uname -a;'")

答案 1 :(得分:1)

您可以使用Bash2Py来做到这一点。

此外,您可以尝试使用docker image

礼貌:Bash to Python

所以下面的代码实际上是完整的转换脚本。

#! /usr/bin/env python
from __future__ import print_function

import sys,os

class Bash2Py(object):
  __slots__ = ["val"]
  def __init__(self, value=''):
    self.val = value
  def setValue(self, value=None):
    self.val = value
    return value

def GetVariable(name, local=locals()):
  if name in local:
    return local[name]
  if name in globals():
    return globals()[name]
  return None

def Make(name, local=locals()):
  ret = GetVariable(name, local)
  if ret is None:
    ret = Bash2Py(0)
    globals()[name] = ret
  return ret

def Array(value):
  if isinstance(value, list):
    return value
  if isinstance(value, basestring):
    return value.strip().split(' ')
  return [ value ]

class Expand(object):
  @staticmethod
  def at():
    if (len(sys.argv) < 2):
      return []
    return  sys.argv[1:]
  @staticmethod
  def star(in_quotes):
    if (in_quotes):
      if (len(sys.argv) < 2):
        return ""
      return " ".join(sys.argv[1:])
    return Expand.at()
  @staticmethod

  def hash():
    return  len(sys.argv)-1

if (Expand.hash() < 1 ):
    print("Usage: "+__file__+" file ...")
    exit(1)

print(__file__+" counts the lines of code")

l=Bash2Py(0)

for Make("f").val in Expand.star(0):
    Make("l").setValue(os.popen("wc -l "+str(f.val)+" | sed \"s/^\\([0-9]*\\).*$/\\1/\"").read().rstrip("\n"))
    print(str(f.val)+": "+str(l.val))

代码的内容位于底部的for循环中。

bash2py进行了一些安全的转换,并将bash脚本包装到某些方法中,例如“ Make”,“ Array”等,我们可以通过一些工作来摆脱它们。

通过替换:

  

Bash2Py(0)带有0的Make(“ f”)。val和f,以及Make(“ l”)带有l等等f.val   与f和l.val与l等