जब subprocess.Popen(args, shell=True)
का उपयोग कर "gcc --version
" (सिर्फ एक उदाहरण के रूप में) को चलाने के लिए, विंडोज पर हम इस मिल:क्यों subprocess.Popen() खोल के साथ = सही काम लिनक्स बनाम विंडोज पर अलग है?
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc (GCC) 3.4.5 (mingw-vista special r3) ...
तो यह अच्छी तरह से संस्करण की छपाई के रूप में मैं उम्मीद करते हैं। लेकिन लिनक्स पर हम इस मिल:
>>> from subprocess import Popen
>>> Popen(['gcc', '--version'], shell=True)
gcc: no input files
क्योंकि जीसीसी --version
विकल्प नहीं मिला है।
दस्तावेज़ यह निर्दिष्ट नहीं करते हैं कि विंडोज के तहत तर्कों के साथ क्या होना चाहिए, लेकिन यह यूनिक्स, पर कहता है, "अगर तर्क एक अनुक्रम है, तो पहला आइटम कमांड स्ट्रिंग निर्दिष्ट करता है, और कोई अतिरिक्त आइटम होगा अतिरिक्त खोल तर्क के रूप में माना जाता है। " आईएमएचओ विंडोज़ तरीका बेहतर है, क्योंकि यह आपको Popen(arglist)
को Popen(arglist, shell=True)
वाले के रूप में कॉल करने की अनुमति देता है।
विंडोज और लिनक्स के बीच अंतर क्यों है?
आमतौर पर पाइथन का संस्करण शामिल करने का एक अच्छा विचार है या कम से कम यदि यह लाइन 2 या 3 है। – mloskot