2016-09-28 7 views
0

コマンドプロンプトから実行するコードを記述しました。コマンドから引数を取っています。Pythonのインタラクティブシステム引数

私は何を試していますか?

start_date = sys.argv[1] 
end_date = sys.argv[2] 

end_date2 = datetime.strptime(end_date, "%d %b %Y").date() 
start_date2 = datetime.strptime(start_date, "%d %b %Y").date() 
--- Do Something --- 

と私は、このようにスクリプトを実行しています:

python myscript.py "19 Aug 2016" "19 Sep 2016" 

これはスムーズに動作します。しかし、私がスクリプトでやっていることは条件が必要です: - start_date2 > end_date2 私は上記の条件が満たされていないので、これを制限するifステートメントとexit()を使用しています。

私の質問: -

それが上記の条件が満たされない場合、引数をリセットすることが可能です?インタラクティブなコードのようなの

if start_date2 < end_date2 : 
    re enter the arguments from the command prompt 
    without stopping the code and take the new arguments and ignore the wrong ones. 

種類:よう

何か。

答えて

0

はい、可能です。単に日付を検出した後に間違ってprint/raw_inputを使用し、新しい日付を尋ね、古いものを上書きしてもう一度日付を確認してください。例えば

(ビットを擬似コード):

start_date = sys.argv[1] 
while start_date.isWrong(): 
    print "start_date is wrong, gimme new one and press enter: " 
    start_date = parse_from_string(raw_input()) 

とにかく、あなたは、コマンドラインオプションを読み取ることargparseを試してみてください。

+0

私は他の人々によっても "argparse"と勧められています。しかし、コードのパフォーマンスに大きな違いはありません。それがどういう違いがあるのか​​教えてください。 –

+1

はい。 Argparseは、ユーザーからデータを取得するために作られたもので、ヘルプの表示、引数の指定、フォーマットのチェック、適切なフォーマットへの変換、データを取得するための良いAPIを提供します(例args.date_fromが良いthen sys.argv [1])...試してみてください:) – sokoli