3

こんにちは、私はPythonにかなり慣れていないので、いじっています。最近、作業中のプロセス用に 2 つのファイルを作成しました。このファイルは、python の実行中に動作しているように見えますが、unix コマンド ラインで python name.py argv を書き込むと何もしません。それはおそらく基本的なものであり、助けていただければ幸いです。最初のファイル (make_dir.py)

import os
import sys

def main():
    directory = sys.argv[1]
    if not os.path.exists(directory):
      os.makedirs(directory)

UNIX端末で私は書く

python make_dir.py /home/user/Python/Test/

結果: テスト フォルダーは作成されません。

2 番目のファイルには、おそらく同じ問題があります。2番目のファイル directory.py

import sys
import os

def main():
  os.chdir(sys.argv[1])
  File = open(sys.argv[2] , 'w')
  File.write(sys.argv[3])
  File.close()

UNIX端末で:

python directory.py /home/user/Python/TEST/ a.log "this is a test"

a.log は作成されません。エラーメッセージが表示された場合、おそらくそれを理解できましたが、メッセージはありませんでした。どんな助けでも大歓迎です。

4

3 に答える 3

7

You're defining a function called main, but never call it. Do:

import os
import sys

def main():
    ...

if __name__ == '__main__':
    main()

See here for more details about this idiom.

于 2013-04-07T20:17:19.047 に答える
1

Python は C ではdef mainなく、魔法でもありません。Python プログラムには、定義済みの実行エントリ ポイントはありません。コードが行っているのは main 関数の定義 (実行ではない) だけなので、Python は定義しmainてから (要求どおりに) 停止します。

main()実行したい場合は、明示的に呼び出す必要があります。次のイディオムを使用する必要があります。

if __name__ == '__main__':
    main()

__name__モジュールの名前を含む、モジュール レベルで作成されるマジック変数です。__name__がである場合'__main__'、現在のモジュールがインポートされたのではなく、直接実行されたことを意味します。このイディオムを使用すると、Python ファイルをモジュール (インポートできるもので、main()自動的に実行されないもの) とスクリプト (自動的に実行されるもの) の両方として使用できますmain()

于 2013-04-07T20:21:19.877 に答える
1

あなたは実際に電話していませんmain。スクリプトの最後に追加するだけmain()で十分ですが、通常は次のイディオムが使用されます。

if __name__ == '__main__':
    main()

mainこれは、スクリプトが別のモジュールからインポートされただけでなく、直接実行された場合に呼び出されます。

モジュールをスクリプトとして実行する

于 2013-04-07T20:18:23.580 に答える