したがって、次のようなことを少し行うことができます。
#!python
from __future__ import print_function
# Your code here
# ...
#
if __name__ == '__main__':
import sys
top=500
if len(sys.argv) < 2:
print ("Must supply a list of files to operate on", file=sys.stderr)
## For Python versions older than 2.7 use print >> sys.stderr, "..."
sys.exit(1)
for each in sys.argv[1:]:
main(each, top)
任意の数のファイル名引数を使用してプログラムを呼び出すことができるように、既存の関数をラップする簡単な方法を示していることに注意してください。必要に応じて、ディレクトリを指す単一の引数を取ることもできます(そこからすべてのファイルを処理したい:
#!python
from __future__ import print_function
# Your code here
# ...
#
if __name__ == '__main__':
import sys
top = 500
if len(sys.argv) != 2:
## Require exactly one argument: sys.argv[0] is our own executable filename
## (Similarly to how class methods are called with "self" as their first
## argument, but on the OS layer)
print ("Must supply directory name full of files to be processed", file=sys.stderr)
sys.exit(1)
for each in os.listdir(sys.argv[1]):
main(each, top)
引数を処理したり、デフォルトの引数をハードコードしたりするために選択できる方法は他にもたくさんあります。"top" をハードコードされた値からコマンド ライン引数に変更する方法は、ご想像にお任せします。追加のクレジットについては、オプション/引数解析モジュール ( argparseまたはoptparse ) を使用して、デフォルトのコマンド ライン スイッチにします。
このif __name__ == ....
ビジネスは、機能をアクションから分離することを奨励することにより、優れたプログラミング プラクティスを促進する Python の規則であることに注意してください。したがって、すべての機能を行の上に定義if __name__ == '__main__':
し、スクリプトによって (その機能を使用して) 実行されるすべてのアクションを行の後に呼び出すことができます。これにより、ファイルを他のプログラムでモジュールとして使用できるようになりますが、独自のプログラムとして独自のユーティリティを使用することもできます。(これはほとんど Python に固有の機能ですが、Ruby は構文がわずかに異なる同様のセマンティクスのセットを実装しています)。
これにより、Python 3.x と互換性のあるセマンティクスを__future__
使用する Python 2.7 を使用してプログラムを作成できます。print
これは、最終的に Python 3 に移行する場合や、言語の議論に役立つため、ステートメントとしての古い「print」を段階的に廃止し、「print()」関数の使用を促進することができます。細かいことを気にしなくても気にしないでください。違いが広範囲に及ぶことを認識してください。表示される例の大部分は古い印刷セマンティクスを使用しており、今後は少し互換性のない新しいセマンティクスを使用する必要があります。
(注: 私の最初の投稿ではfrom __future__ import
、__main__
セクションに__future__
. Python2.x と Python3 の印刷セマンティクスの違いに行き詰まります。