꽤 많이 google했습니다. 그리고 vars()를 사용하여 제안한 argparse 설명서를 읽으십시오. 예상대로 네임 스페이스 위반이 발생합니다.이 문제와 관련된 경로를 파악할 수 없습니다.python argparse : 목록에 대한 값으로 인수 사용
기본적으로 argparse 다중 값 인수를 사용하여 for 루프를 실행할 수 있도록 해당 값의 목록을 만들고 싶습니다. 이는 VNX 배열과 인터페이스하여 모든 개발자 환경에서 데이터 스냅 샷을 재설정하는 것입니다.
명령을 실행하면 argparse가 값을 올바르게 받고 있지만 이름 공간 예외가 발생하고 실제로 인수 값을 사용하지 않는 것을 볼 수 있습니다.
지도에 대해 많은 감사를 드리며 더 나은 문서에 대한 링크를 통해 문제를 더 잘 설명 할 수 있습니다. 나는이 문제를 안다. 어떻게 해결할 것인가? 나는 문법적으로이 글을 읽으려면 (또는 구글) 무엇을 읽어야할지 모르겠다.
[[email protected] tmp]# ./envrestore.py -e dev1 dev2 dev3
Namespace(myenv=['dev1', 'dev2', 'dev3'])
Traceback (most recent call last): File "./envrestore.py", line 43, in run_create_snap() File "./envrestore.py", line 36, in run_create_snap for e in myenv: TypeError: 'Namespace' object is not iterable
[[email protected] tmp]#
#!/usr/bin/env python
import pexpect, sys, datetime, argparse, time
from fabric.api import *
parser = argparse.ArgumentParser()
parser.add_argument('-e', '--myenv', nargs='*', type=str)
print parser.parse_args()
array = "vnx.lipsum.com"
seckey = "/opt/Navisphere/blah"
myenv = parser.parse_args()
dbhosts = ['mongo01', 'mysql01']
# !! DO NOT CHANGE IDs !!
lunpnum = "0000000"
mongo_plunid = "3"
mysql_plunid = "4"
def delete_snap(env=myenv, host=dbhosts):
child = pexpect.spawn('naviseccli -secfilepath %s -h %s snap -destroy -id %s-%s-snap' % (seckey, array, host, env))
print child
child.logfile = sys.stdout
child.expect('Are you sure you want to perform this operation\?\(y\/n\):')
child.sendline('n')
def create_snap(env=myenv, host=dbhosts, lunid=''):
print "naviseccli -secfilepath %s -h %s snap -create -res %s -name %s-%s-snap -allowReadWrite yes" % (seckey, array, lunid, host, env)
def run_delete_snap():
for e in myenv:
for h in dbhosts:
delete_snap(env=e, host=h)
def run_create_snap():
for e in myenv:
for h in dbhosts:
if "mysql" in h:
create_snap(env=e, host=h, lunid=mysql_plunid)
elif "mongo" in h:
create_snap(env=e, host=h, lunid=mongo_plunid)
run_create_snap()
대단히 감사드립니다. [[email protected] tmp] # ./envrestore.py -e dev1 naviseccli -secfilepath/opt/Navisphere/blah -h vnx.lipsum.com snap -create -res 3 -name mongo01-dev1-snap - allowReadWrite yes naviseccli -secfilepath/opt/Navisphere/blah -h vnx.lipsum.com 스냅 -create -res 4 -name mysql01-dev1-snap -allowReadWrite 예 – jed