পাইথন স্ক্রিপ্টের সিনট্যাক্সটি কার্যকর না করে কীভাবে তা পরীক্ষা করতে পারি?


368

আমি perl -c programfileপার্ল প্রোগ্রামের সিনট্যাক্স পরীক্ষা করতে ব্যবহার করতাম এবং তারপরে এটি কার্যকর না করে প্রস্থান করতাম। পাইথন স্ক্রিপ্টের জন্য এটি করার সমতুল উপায় আছে কি?

উত্তর:


590

আপনি এটি সংকলন করে বাক্য গঠন পরীক্ষা করতে পারেন:

python -m py_compile script.py

9
import script, তবে সমস্ত কোড অবশ্যই ফাংশনে থাকতে হবে। যা যাইহোক ভাল অনুশীলন। এমনকি আমি এটি শেল স্ক্রিপ্টগুলির জন্যও গ্রহণ করেছি। এখান থেকে এটি ইউনিট পরীক্ষার একটি ছোট পদক্ষেপ।
হেন্ক ল্যাঙ্গভেল্ড

1
ইনজেকশন মডিউলগুলি সহ আপনার এম্বেড ইঞ্জিন থাকলে কাজ করবে না
n611x007

57
python -m compileallডিরেক্টরিগুলি পুনরাবৃত্তভাবে করতে পারে এবং একটি আরও ভাল কমান্ড লাইন ইন্টারফেস রয়েছে।
C2H5OH

9
দুর্দান্ত উত্তর, তবে আমি ".pyc" ফাইল তৈরির জন্য কীভাবে এটি প্রতিরোধ করতে পারি? ".Pyc" ফাইলটি কীভাবে ব্যবহার করা যায়?
pdubois

4
পাইথন ২.7.৯-এর জন্য, যখন -m py_compileউপস্থিত থাকি, আমি এটি খুঁজে পেলাম যে .pyc ফাইলটি সৃষ্টি -Bবা PYTHONDONTWRITEBYTECODEদমন করে না ।
ডেভিডআরআর 25'15

59

আপনি এই সরঞ্জামগুলি ব্যবহার করতে পারেন:


10
এগুলি সবই সিনট্যাক্স পরীক্ষা করার চেয়ে অনেক বেশি করে। সত্যিই এটি উত্তর নয়।
ম্যাট যোগদানকারী

22
এই সমস্ত সিনট্যাক্স পরীক্ষা করে, তাই উত্তরটি সঠিক। অন্যান্য চেকগুলি একটি (খুব দরকারী) বোনাস।
jhndodo

19
import sys
filename = sys.argv[1]
source = open(filename, 'r').read() + '\n'
compile(source, filename, 'exec')

এটি চেকার.পি হিসাবে সংরক্ষণ করুন এবং চালান python checker.py yourpyfile.py


1
ক্ষুদ্র স্ক্রিপ্ট সংগ্রহের জন্য মেকফিলের জন্য সামান্য কিছুটা ভারী, তবে এটি কাজটি করে এবং কোনও অযাচিত ফাইল তৈরি করে না।
প্রসকি 0

1
এটি একটি পুরানো উত্তর, তবে লক্ষ্য করার মতো কিছু এটি হ'ল এটি কেবল সিনট্যাক্সটি পরীক্ষা করে, স্ক্রিপ্টটি সফলভাবে কার্যকর হয় কিনা।
ভালেন্টিন

অনেক ধন্যবাদ. এটা কাজ করে। কেবল একটি মন্তব্য, কোডটি সঠিক হলে কোনও উত্তর নেই। অন্যথায় লাইন সংখ্যা সহ ত্রুটি বার্তা প্রদর্শিত হবে।
musbach

5

astমডিউলটি ব্যবহার করে এখানে আরও একটি সমাধান দেওয়া হয়েছে :

python -c "import ast; ast.parse(open('programfile').read())"

পাইথন স্ক্রিপ্টের মধ্যে থেকে পরিষ্কার করে এটি করতে:

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)

1
অসাধারণ ওয়ান-লাইনারের জন্য আমদানিকৃত সমস্ত libs বা .pyc ফাইল তৈরি করার প্রয়োজন হয় না। ধন্যবাদ!
mmell


1

পাইফ্লেকস আপনি যা চান তা করেন, এটি কেবল বাক্য গঠন পরীক্ষা করে। ডক্স থেকে:

পাইফ্লেকস একটি সাধারণ প্রতিশ্রুতি দেয়: এটি কখনও স্টাইল সম্পর্কে অভিযোগ করবে না এবং এটি মিথ্যা ইতিবাচকতা কখনই নির্গত করতে খুব চেষ্টা করবে না।

পাইফ্লেকস পাইলেট বা পাইচেকারের চেয়েও দ্রুত is এটি মূলত কারণ পাইফ্লেকগুলি পৃথকভাবে প্রতিটি ফাইলের সিনট্যাক্স ট্রি পরীক্ষা করে।

ইনস্টল এবং ব্যবহার করতে:

$ pip install pyflakes
$ pyflakes yourPyFile.py

0

কোনও কারণে (আমি একজন পাই নবাগত ...) - এম কলটি কার্যকর হয়নি ...

সুতরাং এখানে একটি ব্যাশ মোড়কের কাজ ...

# ---------------------------------------------------------
# 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.