2010-11-22 32 views
1

私はargparseを使って再帰的プログラムを書いています。唯一必要な引数は、動作するファイルです。再帰的に呼び出すと、ファイル名は必要ありません(新しいディレクトリを呼び出すので)。オプションが必要です。 argparseはpython programname.py -options arg FILENAME FILENAMEpython programname.py FILENAME FILENAME -options argの両方を許可するという問題があります。私は慎重に ' - 'を検索し、if文で大量に処理することができましたが、より良い方法があるはずです。そんなにPythonでの再帰argparse

parser = argparse.ArgumentParser(description='Personal upload script. (defaults to ' + user + '@' + server + directory + ')') 
parser.add_argument('files', nargs="+", help='file(s) to upload') 
parser.add_argument('-s', metavar='example.com', default=server, help='server to upload to') 
parser.add_argument('-u', metavar='username', default=user, help='ftp username') 
parser.add_argument('-p', metavar='password', default=password, help='ftp password') 
parser.add_argument('-d', metavar='example/', default=directory, help='directory to place file in') 
parser.add_argument('-n', metavar='myfile.txt', help='name to save file as') 
parser.add_argument('-c', metavar='###', help='chmod upload') 
parser.add_argument('-l', action='store_true', help='print out new url(s)') 
parser.add_argument('-r', action='store_true', help='recursive') 
parser.add_argument('-F', action='store_true', help='force (overwrite files/create non-existing dirs)') 
parser.add_argument('-v', action='store_true', help='verbose') 
args = parser.parse_args() 

感謝:

ないことが重要ことを確認しますが、ここでは私のargparse宣言です!

答えて

7

あなたは自分の人生を難しくしています。プログラムを再帰的にするのではなく、関数を再帰的にします。プログラムを再帰的にすることは、メモリを使い果たし、一般にシステムを圧倒する優れた方法です。

再帰的な作業がアプリケーションの別のインスタンスではなく、自分自身を呼び出す関数に限定されるようにアプリケーションを書き換えます。

また、再帰性を完全に排除することをお勧めします。ディレクトリツリーを繰り返しているようです。再帰的にそれを行う理由はありません。実際には、Pythonにはライブラリツリー関数)を扱うライブラリ関数があります。 os.walkを参照してください。

1

おそらく、プロセスレベルの再帰を行うべきではありません。つまり、私はargparseの " - "扱いが、あなたが探しているツールを提供するかもしれないと思います(私が正しく理解していれば)。 argparse文書で文字列 " - "を検索します。