পাইথনও.এক্সই বা পাইথন.এক্সে?


157

দীর্ঘ গল্প সংক্ষিপ্ত: pythonw.exeকিছুই না, কিছুই python.exeগ্রহণ করে না (কোনটি আমার ব্যবহার করা উচিত?)

test.py:

print "a"

সিএমডি উইন্ডো:

C:\path>pythonw.exe test.py
<BLANK LINE>
C:\path>

C:\path>python.exe test.py
  File "C:\path\test.py", line 7
    print "a"
            ^
SyntaxError: invalid syntax

C:\path>

আমি কি ভয়ানক ভুল করছি বলুন দয়া করে।


14
দুর্ভাগ্যক্রমে এটি পাইথন বনাম পাইথনওয়ু দুটি দিক (সাধারণত আরও আকর্ষণীয় দিক) এবং পাইথন 2 থেকে পাইথন 3-তে কিছু বেসিক সিনট্যাক্স পরিবর্তন করে। ওপি কোন সমালোচনা যারা পূর্বেই জানি না পারে, কিন্তু তা সত্ত্বেও এটা এই প্রশ্নের মান taints পাইথন সম্পর্কে যেতে-টু রিসোর্স W
mnagel

উত্তর:


170

আপনি যদি আপনার প্রোগ্রামটি চালাওয়ার সময় টার্মিনাল উইন্ডোটি পপ আপ করতে না চান তবে ব্যবহার করুন pythonw.exe;
অন্যথায়, ব্যবহার করুনpython.exe

সিনট্যাক্স ত্রুটি সম্পর্কিত: print এখন 3.x
একটি ফাংশন তাই এর পরিবর্তে ব্যবহার করুন:

print("a")

283

বিদ্যমান উত্তরগুলি সংক্ষিপ্ত করে এবং পরিপূরক করতে:

  • python.exeCLI- টাইপ স্ক্রিপ্ট চালু করার জন্য একটি কনসোল (টার্মিনাল) অ্যাপ্লিকেশন ।

    • বিদ্যমান কনসোল উইন্ডো থেকে চালিত না python.exe হলে একটি নতুন কনসোল উইন্ডো খোলে
    • স্ট্যান্ডার্ড স্ট্রীম করে sys.stdin , sys.stdoutএবং sys.stderrহয় কনসোল উইন্ডো সংযুক্ত
    • এক্সিকিউশন হয় সমলয় যখন একটি থেকে চালু cmd.exe: অথবা PowerShell কনসোল উইন্ডো দেখুন eryksun করি' 1 ম মন্তব্য s।

      • যদি নতুন কনসোল উইন্ডোটি তৈরি করা হয়, তবে স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত এটি খোলা থাকে।
      • বিদ্যমান কনসোল উইন্ডো থেকে আহ্বান করা হলে, স্ক্রিপ্টটি শেষ না হওয়া অবধি প্রম্পটটি অবরুদ্ধ করা হয়।
  • pythonw.exeসমস্ত স্ক্রিপ্টগুলি জিইউআই / ন-ইউআই-এ চালু করার জন্য একটি জিইউআই অ্যাপ্লিকেশন ।

    • কোনও কনসোল উইন্ডো খোলা হয়নি।
    • মৃত্যুদণ্ড কার্যকর অ্যাসিক্রোনাস :
      • কোন কনসোল উইন্ডো থেকে আহ্বান করা হলে, স্ক্রিপ্টটি কেবল চালু করা হয় এবং স্ক্রিপ্টটি এখনও চলছে কিনা তা প্রম্পটটি এখনই ফিরে আসে।
    • স্ট্যান্ডার্ড স্ট্রীম করে sys.stdin , sys.stdoutএবং sys.stderrহয় পাওয়া যায় না
      • সতর্কতা : আপনি অতিরিক্ত পদক্ষেপ না নিলে এর সম্ভাব্য অপ্রত্যাশিত পার্শ্ব প্রতিক্রিয়া রয়েছে :
        • অযথিত ব্যতিক্রমগুলি স্ক্রিপ্টটি নিঃশব্দে বাতিল করতে বাধ্য করে
        • পাইথন ২.x এ, কেবল ব্যবহারের চেষ্টা করার print()ফলে এটি ঘটতে পারে (৩.x এ, print()কেবল কোনও প্রভাব নেই)।
        • করতে আপনার স্ক্রিপ্টের মধ্যে থেকে যে প্রতিরোধ , এবং আরো জানতে দেখুন এই উত্তর খনি।
        • অ্যাড-হক , আপনি আউটপুট পুনঃনির্দেশ ব্যবহার করতে পারেন : ধন্যবাদ, @ হ্যান্ডল।
          pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
          (পাওয়ারশেল থেকে
          cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt:) ফাইলগুলিতে স্টডআউট এবং স্টডার আউটপুট ক্যাপচার করতে
          যদি আপনি আত্মবিশ্বাসী হন যে print()আপনার স্ক্রিপ্টটি নিঃশব্দে ব্যর্থ হওয়ার একমাত্র কারণ pythonw.exeএবং আপনি স্টাডআউট আউটপুটে আগ্রহী নন, মন্তব্যগুলি থেকে @ হ্যান্ডেলের কমান্ডটি ব্যবহার করুন:
          pythonw.exe yourScript.pyw 1>NUL 2>&1
          ক্যাভেট : স্ক্রিপ্টগুলি সরাসরি আহ্বান করার সময় এই আউটপুট পুনঃনির্দেশ কৌশলটি কার্যকর হয় না ( স্ক্রিপ্ট ফাইলের পথটি দিয়ে যাওয়ার বিপরীতে )। দেখুন eryksun এর 2nd মন্তব্য এবং নীচের তার ফলো আপ।*.pywpythonw.exe

আপনি করতে পারেন নিয়ন্ত্রণসমূহ এক্সেকিউটেবল ডিফল্ট করে আপনার স্ক্রিপ্টটি চালানোর - যেমন যখন এক্সপ্লোরার থেকে খোলা হিসাবে - দ্বারা অধিকার ফাইলে এক্সটেনশন নির্বাচন :

  • *.py ফাইলগুলি ডিফল্টরূপে সম্পর্কিত (অনুরোধ করা) থাকে python.exe
  • *.pyw ফাইলগুলি ডিফল্টরূপে সম্পর্কিত (অনুরোধ করা) থাকে pythonw.exe

1
PS: আমি কোথাও stdout এবং stderr পাইপ করার সময় এটি কার্যকর হয়: > pythonw ls.pyw >nul 2>&1(যদিও কিছুই লেখা নেই)।
হ্যান্ডেল করুন

1
এই সিঙ্ক্রোনাস এবং অ্যাসিনক্রোনাস আচরণটি কমান্ডটি ব্যবহার না করেই কেবলমাত্র cmd.exe ইন্টারেক্টিভ কমান্ড প্রম্পট থেকে start। এটি আসলে PEBকনসোল প্রক্রিয়া কিনা তা নির্ধারণের জন্য শিশু প্রক্রিয়াটি পরীক্ষা করে । কনসোল হোস্ট প্রক্রিয়া (conhost.exe) এটি সম্পর্কে চিন্তা করে না। যদি আপনি বর্তমান কনসোলে subprocess.Popenঅন্য কোনও python.exeউদাহরণ সংযুক্ত করতে ব্যবহার করেন এবং এটি না waitকরে থাকেন, তবে কনসোলে একসাথে অ্যাক্সেস করার জন্য উভয় প্রক্রিয়ার রেসিংয়ের আপনার একটি বিভ্রান্তিকর গন্ডগোল হবে।
এরিক সান

2
সিস্টেম কল দ্বারা একটি ব্যবহারকারী-মোড প্রক্রিয়া তৈরি করা হয় NtCreateUserProcess। যদি লক্ষ্য নির্বাহযোগ্য একটি কনসোল প্রোগ্রাম হয় তবে সিস্টেমটি নিঃশর্তভাবে পিতামাতার মানক হ্যান্ডলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত। তবে একটি নন-কনসোল প্রোগ্রামের জন্য এটি পরিষ্কারভাবে পিতামাতার উত্তরাধিকারসূত্রে প্রাপ্ত হ্যান্ডেলগুলির উত্তরাধিকারী হিসাবে বলা দরকার। কোনও ফাইল অ্যাসোসিয়েশনের উপর ভিত্তি করে কোনও ফাইল চালনার জন্য, সিএমডি কলগুলি ShellExecuteEx, যা CreateProcess=> কল করলে স্পষ্টভাবে হ্যান্ডলগুলি উত্তরাধিকার সূত্রে আসে না NtCreateUserProcess। ফলস্বরূপ স্ট্যান্ডার্ড আই / ও পুনর্নির্দেশকরণ সিএমডি-তে কাজ করে যখন কনসোল .পি স্ক্রিপ্টগুলি শুরু করে তবে নন-কনসোল .pyw স্ক্রিপ্টগুলি নয়।
এরিক সান

2
সেন্টিমিডি শেলটি প্রথমে যেমন পাস করার চেষ্টা CreateProcessকরে । এটি কেবল তখনই ব্যর্থ হয় যখন লক্ষ্যটি কোনও PE এক্সিকিউটেবল হয় না (যেমন এটি একটি .py স্ক্রিপ্ট) বা উন্নততার প্রয়োজন হয় (যেমন, osk.exe)। সুতরাং যখন আপনি সরাসরি চালানোর বা , এটা cmd কমান্ড এর উত্তরাধিকারী হবে , এবং , যা (আসলে সিআরটি) মডিফাই cmd মাধ্যমে আগে ও কলিং পর যখন স্ট্যান্ডার্ড ইনপুট / আউটপুট একটি নল, ফাইল, অথবা ডিভাইস থেকে আপনাকে পুনঃনির্দেশিত করা হয়। bInheritHandlesTRUEShellExecuteExCreateProcesspythonw.exepyw.exeStandardInputStandardOutputStandardErrorSetStdHandleCreateProcess
এরিক সান

2
নোট করুন যে STARTUPINFOসিএমডি পাইথনের চেয়ে বিপরীতে হ্যান্ডলগুলি (hStdInput, hStdOutput, hStdErr) ব্যবহার করে না subprocess.Popen। এটি এ থেকে দূরে যেতে পারে কারণ এটি একক থ্রেডেড প্রোগ্রাম। এটি কেবলমাত্র এই নকশার কারণে পুনর্নির্দেশটি ShellExecuteExপুরোপুরি কাজ করে (কেবল কনসোল প্রোগ্রামগুলির জন্য, যেমন উল্লেখ করা হয়েছে) কারণ জিইউআই শেল এপিআই অন্যথায় স্ট্যান্ডার্ড আই / ও এর কোনও সমর্থন রাখে না।
এরিক সান

19

এখানে দেখুন: http://docs.python.org/using/windows.html

pythonw.exe "এটি শুরুতে টার্মিনাল উইন্ডোটি দমন করে।"


8
pythonw.exeপার্শ্ব প্রতিক্রিয়া রয়েছে যে আপনার প্রোগ্রামটি নীরবতা ব্যর্থ হতে পারে যদি এটি স্টাডাউট /
স্টডার স্ট্রিমকে

16

যদি আপনি অন্য কোনও প্রক্রিয়া থেকে একটি পাইথন স্ক্রিপ্ট কল করতে চলেছেন (বলুন, কমান্ড লাইন থেকে), ব্যবহার করুন pythonw.exe। অন্যথায়, আপনার ব্যবহারকারী অবিরাম cmdপ্রক্রিয়া চালু করে একটি উইন্ডো অবিচ্ছিন্নভাবে দেখতে পাবেন । এটি এখনও আপনার স্ক্রিপ্টটি ঠিক একই রকম চালাবে তবে এটি ব্যবহারকারীর অভিজ্ঞতাতে প্রবেশ করবে না।

একটি উদাহরণ হতে পারে একটি ইমেল প্রেরণ করা; python.exeএকটি সি এল এল উইন্ডো পপ আপ করবে, ইমেল প্রেরণ করবে, এবং উইন্ডোটি বন্ধ করবে। এটি দ্রুত ফ্ল্যাশ হিসাবে উপস্থিত হবে এবং কিছুটা বিরক্তিকর হিসাবে বিবেচনা করা যেতে পারে। pythonw.exeএটি এড়ায়, তবে এখনও ইমেলটি প্রেরণ করে।


6
সত্য, কিন্তু পুনরায় "বলুন, কম্যান্ড লাইন থেকে": যদি আপনার আগে থেকেই যদি হয় একটি কনসোল (টার্মিনাল) উইন্ডোতে, তারপর python.exeহবে না অন্য এক খুলুন।
mklement0

2

আমি কিছুক্ষণের জন্য এটি পাওয়ার জন্য সংগ্রাম করে যাচ্ছিলাম। একবার আপনি এক্সটেনশনটি .pyw এ পরিবর্তন করে নিলে নিশ্চিত হয়ে নিন যে আপনি ফাইলটির বৈশিষ্ট্যগুলি খোলেন এবং পাইথনডব্লু.এক্সইয়ের "ওপেন উইথ" পাথটি পরিচালনা করুন।


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