-3

これがスクリプトの抜粋です(未テスト)

def start_custer():
    try:
        myidentifier=mydict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['ClusterIdentifier']
    except IndexError:
        conn.restore_from_cluster_snapshot('vi-mar5-deliveryreport-new', mysnapidentifier, availability_zone='us-east-1a')

def stop_cluster():
    try:    
        myidentifier=mydict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['ClusterIdentifier']
        conn.delete_cluster(myidentifier, skip_final_cluster_snapshot=False, final_cluster_snapshot_identifier=myvar)
    except:
        print "error"
  1. これらの関数は技術的に (構文的に) 正しいですか?

  2. Pythonスクリプトを呼び出しているときにそれらを呼び出すにはどうすればよいですか? 両方ではなく、一度にクラスターを開始または停止する必要があります。

4

4 に答える 4

4

2 番目の質問については、次の方法でコマンド ラインを解析しますargparse

import argparse

parser = argparse.ArgumentParser(description="Manage the cluster")
parser.add_argument("action", choices=["stop", "start"],
                    help="Action to perform")

args = parser.parse_args()
if args.action == "start":
    start_cluster()
if args.action == "stop":
    stop_cluster()
于 2013-10-24T16:29:05.913 に答える
2

他の人がこれを行うための最良の方法を示していますが、記録のために、コマンドラインからこれを行うこともできます:

python -c "import cluster; cluster.start_cluster()"

(モジュールファイルに名前が付けられていると仮定します-そうでない場合は、それに応じcluster.pyてステートメントを調整してください)import

これは、コマンド ラインを自分で解析するほどユーザー フレンドリーではありませんが、ピンチの場合には実行できます。

于 2013-10-24T17:47:19.907 に答える
1

1)どこかで定義してインポートしたSyntactically場合は正しいです!conn

2)

def stop_cluster():
    ## Your code

def fun():
    ## your code

if __name__ == "__main__":
    import sys
    globals()[sys.argv[1]]()

使用法:

   python2.7 test_syn.py fun
于 2013-10-24T16:28:31.913 に答える
1

コマンドライン引数をチェックし、有効な引数が指定されていない場合はプロンプトを表示する main 関数をスクリプトに追加しました。

import sys

def start_custer():
    try:
        myidentifier=mydict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['ClusterIdentifier']
    except IndexError:
        conn.restore_from_cluster_snapshot('vi-mar5-deliveryreport-new', mysnapidentifier, availability_zone='us-east-1a')

def stop_cluster():
    try:    
        myidentifier=mydict['DescribeClustersResponse']['DescribeClustersResult']['Clusters'][0]['ClusterIdentifier']
        conn.delete_cluster(myidentifier, skip_final_cluster_snapshot=False, final_cluster_snapshot_identifier=myvar)
    except:
        print "error"

def main():
    valid_args, proc = ['start','stop'], None

    # check if cmd line args were passed in (>1 as sys.argv[0] is name of program)
    if len(sys.argv) > 1:
        if sys.argv[1].lower() in valid_args:
            proc = sys.argv[1].lower()

    # if a valid arg was passed in this has been stored in proc, if not prompt user
    while not proc or proc not in valid_args:
        print "\nPlease state which procedure you want to call, valid options are:", valid_args
        proc = raw_input('>>> ').lower()

        # prompt user if invalid
        if proc not in valid_args:
            print proc, 'is not a valid selection.'

    if proc == 'start':
        start_custer()
    elif proc == 'stop':
        stop_cluster()

# this makes the script automatically call main when starting up
if __name__ == '__main__':
    main()

これはコマンド ラインから呼び出すことができます。たとえば、ファイルと同じディレクトリ (たとえば、cluster_ctrl.py という名前) にいる場合は、次のようにします。

python cluster_ctrl.py start
于 2013-10-24T16:43:01.493 に答える