Eskiden perl -c programfile
Perl programının sözdizimini kontrol edip yürütmeden çıkardım . Bunu bir Python betiği için yapmanın eşdeğer bir yolu var mı?
Eskiden perl -c programfile
Perl programının sözdizimini kontrol edip yürütmeden çıkardım . Bunu bir Python betiği için yapmanın eşdeğer bir yolu var mı?
Yanıtlar:
Sözdizimini derleyerek kontrol edebilirsiniz:
python -m py_compile script.py
python -m compileall
ayrıca dizinleri özyinelemeli olarak yapabilir ve daha iyi bir komut satırı arayüzüne sahiptir.
-m py_compile
mevcut, ben .pyc dosyasının oluşturulmasını ne -B
de PYTHONDONTWRITEBYTECODE
bastırdığını buluyorum .
import sys
filename = sys.argv[1]
source = open(filename, 'r').read() + '\n'
compile(source, filename, 'exec')
Bunu checker.py kaydedin ve çalıştırın python checker.py yourpyfile.py
.
İşte ast
modülü kullanarak başka bir çözüm :
python -c "import ast; ast.parse(open('programfile').read())"
Bunu bir Python betiğinden temizlemek için:
import ast, traceback
filename = 'programfile'
with open(filename) as f:
source = f.read()
valid = True
try:
ast.parse(source)
except SyntaxError:
valid = False
traceback.print_exc() # Remove to silence any errros
print(valid)
Belki de yararlı çevrimiçi denetleyici PEP8: http://pep8online.com/
Pyflakes istediğini yapar, sadece sözdizimini kontrol eder. Dokümanlardan:
Pyflakes basit bir söz verir: asla stilden şikayet etmez ve asla yanlış pozitifler yaymak için çok, çok zor çalışacaktır.
Pyflakes ayrıca Pylint veya Pychecker'dan daha hızlıdır. Bunun nedeni, Pyflakes'in her bir dosyanın sözdizimi ağacını tek tek incelemesi.
Yüklemek ve kullanmak için:
$ pip install pyflakes
$ pyflakes yourPyFile.py
nedense (ben bir py acemi ...) -m çağrı işe yaramadı ...
işte bir bash sarıcı fonk ...
# ---------------------------------------------------------
# check the python synax for all the *.py files under the
# <<product_version_dir/sfw/python
# ---------------------------------------------------------
doCheckPythonSyntax(){
doLog "DEBUG START doCheckPythonSyntax"
test -z "$sleep_interval" || sleep "$sleep_interval"
cd $product_version_dir/sfw/python
# python3 -m compileall "$product_version_dir/sfw/python"
# foreach *.py file ...
while read -r f ; do \
py_name_ext=$(basename $f)
py_name=${py_name_ext%.*}
doLog "python3 -c \"import $py_name\""
# doLog "python3 -m py_compile $f"
python3 -c "import $py_name"
# python3 -m py_compile "$f"
test $! -ne 0 && sleep 5
done < <(find "$product_version_dir/sfw/python" -type f -name "*.py")
doLog "DEBUG STOP doCheckPythonSyntax"
}
# eof func doCheckPythonSyntax
import script
, ancak tüm kod işlevlerde olmalıdır. Zaten iyi bir uygulama. Bunu kabuk komut dosyaları için bile kullandım. Buradan birim testi yapmak için küçük bir adım.