Pythonを味わう

2044 ワード

タスク:
Macでは、Pythonを利用してAppをcodesignするスクリプトを実現します.「codesign.py[identity][app_path]を実行します.identityデフォルトは「5 QTX 4 F 9 G 92」、app_pathデフォルトは「~/XXX.app」
簡単なドキュメント検索
私たちのプログラムはパラメータを受け入れるため、sysモジュールを使用しなければならないし、codesignコマンドを実行しなければならないし、commandsモジュールを使用しなければならないので、ドキュメントを検索してモジュールのAPIを理解することが重要です.私は次の方法で見ます.
pydoc sys
pydoc commands

モジュールだけでなく、モジュール内のobjectも表示できます.
pydoc sys.argv

廖先生のpython教育文書を参考にして、モジュールの一節:Pythonモジュール、コードを完成します.
import sys
import commands

app_path = "/Users/zhaorui/Downloads/115Browser.app"
identity = "5QTX4F9G92"

def codesign(signature, path):
  command = "codesign --force --deep --timestamp=none --sign "
  command += "\"%s\" \"%s\"" % (signature, path)
  retCode, result = commands.getstatusoutput(command)
  if retCode != 0:
    print result
    print "code sign failed"

def main():
    global identity
    global app_path
    args = sys.argv
    if len(args)==1:
      pass
    elif len(args)==2:
      identity = args[1]
    elif len(args) == 3:
      identity = args[1]
      app_path = args[2]
    else:
        print 'Too many arguments!'
        return
    codesign(identity,app_path)

if __name__=='__main__':
    main()

Pythonの変なところ
関数でグローバル変数を使用すると、グローバル変数として表示されます.次の例のglobal myGlobalは必須です.
# sample.py
myGlobal = 5

def func1():
    global myGlobal
    myGlobal = 42

def func2():
    print myGlobal

func1()
func2()

「=」はPythonでは単純な付与操作ではなく、変数を定義する操作であるため、Pythonで関数で定義された変数は、ドメインのデフォルトが現在の関数である.この点は私が接触した他の言語(Swift,C,C++)とは違います.
myGloalが数値タイプではなくリストであれば、"="操作がないため、以下のコードで期待される[5,42].
# sample.py
myGlobal = [5]

def func1():
    global myGlobal
    myGlobal.append(42)

def func2():
    print myGlobal

func1()
func2()

参照Stackoverflow
http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-created-them