事の発端は、Twitterでのこの発言。
maraigue: PerlやRubyはruby -e "script"でスクリプト実行できるけど、Pythonはshとかと同じでpython -c "script"なのね。
http://twitter.com/maraigue/statuses/794964644
gan2: @maraigue Perl や Ruby の -c は Python では何になってるのか気になる
http://twitter.com/gan2/statuses/794965707
PerlやRubyでは、コマンドラインで「ruby -c myscript.rb」のように入力することで、スクリプトの文法のチェックのみを行うことができる。
ところがPythonでは、そのような機能はpythonインタプリタには無いようなのである(文法チェック用の外部ツールは存在する)。
そこで簡易的な文法チェックスクリプトを作ってみた。
以下のシェルスクリプトを適当な名前のファイル(例えば pysyntax)に保存し、実行権限を与える。(※全角の円記号は半角に直して下さい)
#!/bin/sh
( echo "import sys¥nsys.exit()"; cat $1 ) | python -
その上で、シェル上で
$ ./pysyntax myscript.py
のように入力すると、文法に問題がなければ何も表示されず、文法に問題があればそのエラーが表示される。
なお、引数に与えるスクリプトがカレントディレクトリにない場合、ひょっとしたら上手くいかないかもしれません。
仕組みはいたって簡単で、引数に与えたファイルの先頭に
import sys
sys.exit()
の2行を付け加えたうえで、pythonインタプリタに実行させているのである。sys.exit()以下は実行はされないが、スクリプトの解析の対象にはなるため、そこで文法エラーがあればpythonインタプリタがエラーメッセージを出してくれる、という仕組みである。
maraigue: PerlやRubyはruby -e "script"でスクリプト実行できるけど、Pythonはshとかと同じでpython -c "script"なのね。
http://twitter.com/maraigue/statuses/794964644
gan2: @maraigue Perl や Ruby の -c は Python では何になってるのか気になる
http://twitter.com/gan2/statuses/794965707
PerlやRubyでは、コマンドラインで「ruby -c myscript.rb」のように入力することで、スクリプトの文法のチェックのみを行うことができる。
ところがPythonでは、そのような機能はpythonインタプリタには無いようなのである(文法チェック用の外部ツールは存在する)。
そこで簡易的な文法チェックスクリプトを作ってみた。
以下のシェルスクリプトを適当な名前のファイル(例えば pysyntax)に保存し、実行権限を与える。(※全角の円記号は半角に直して下さい)
#!/bin/sh
( echo "import sys¥nsys.exit()"; cat $1 ) | python -
その上で、シェル上で
$ ./pysyntax myscript.py
のように入力すると、文法に問題がなければ何も表示されず、文法に問題があればそのエラーが表示される。
なお、引数に与えるスクリプトがカレントディレクトリにない場合、ひょっとしたら上手くいかないかもしれません。
仕組みはいたって簡単で、引数に与えたファイルの先頭に
import sys
sys.exit()
の2行を付け加えたうえで、pythonインタプリタに実行させているのである。sys.exit()以下は実行はされないが、スクリプトの解析の対象にはなるため、そこで文法エラーがあればpythonインタプリタがエラーメッセージを出してくれる、という仕組みである。