如何使用标准库(不添加paramiko等)将此bash脚本转换为python3:
for ((i=1; i<50; i++)); do ssh BF-c${i}nl 'hostname; free -h; uname -a;';
答案 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
所以下面的代码实际上是完整的转换脚本。
#! /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等