मैं पाइथन के सबप्रोसेस का उपयोग कर रहा हूं। मेजबान ऑपरेटिंग सिस्टम के बाइनरी क्लाइंट का उपयोग करके कुछ एफ़टीपी करने के लिए खोलें। मैं विभिन्न कारणों से ftplib या किसी अन्य पुस्तकालय का उपयोग नहीं कर सकता।subprocess.popen को stdin की आपूर्ति क्यों करता है जो बदलने के लिए stdout को लिखा जाता है?
यदि मैं पॉपिन इंस्टेंस में स्टडीन हैंडलर संलग्न करता हूं तो बाइनरी का व्यवहार बदलना प्रतीत होता है। उदाहरण के लिए, XP के FTP क्लाइंट है, जिससे समस्या को आदेशों की एक पाठ फ़ाइल को स्वीकार करता है का उपयोग करते हुए:
>>>from subprocess import Popen, PIPE
>>>p = Popen(['ftp','-A','-s:commands.txt','example.com'], stdout=PIPE)
>>>p.communicate()[0]
'Connected to example.com.
220 ProFTPD 1.3.1 Server (Debian) ...
331 Anonymous login ok, send your complete email address as your password
<snip>
ftp> binary
200 Type set to I
ftp> get /testfiles/100.KiB
200 PORT command successful
150 Opening BINARY mode data connection for /testfiles/100.KiB (102400 bytes)
226 Transfer complete
ftp: 102400 bytes received in 0.28Seconds 365.71Kbytes/sec.
ftp> quit
>>>
commands.txt:
binary
get /testfiles/100.KiB
quit
जब भी stdin की आपूर्ति, तुम सब stdout में मिलता है:
>>>from subprocess import Popen, PIPE
>>>p = Popen(['ftp','-A','-s:commands.txt','example.com'], stdin=PIPE, stdout=PIPE)
>>>p.communicate()[0]
'binary
get /testfiles/100.KiB
quit'
>>>
प्रारंभ में मैंने सोचा कि यह एक्सपी एफटीपी क्लाइंट का एक क्विर्क था, शायद यह जानकर कि यह इंटरैक्टिव मोड में नहीं था और इसलिए इसके आउटपुट को सीमित कर रहा था। हालांकि, ओएस एक्स के एफटीपी के साथ एक ही व्यवहार होता है - अगर स्टडीन की आपूर्ति की जाती है तो सभी सर्वर प्रतिक्रियाएं स्टडआउट से गायब होती हैं - जो मुझे लगता है कि यह सामान्य व्यवहार है।
विंडोज़ में मैं stdin का उपयोग किए बिना प्रभावी रूप से स्क्रिप्ट ftp पर स्विच का उपयोग कर सकता हूं, लेकिन अन्य प्लेटफार्मों पर एक उस तरह की बातचीत के लिए खोल पर निर्भर करता है।
पाइथन संस्करण दोनों प्लेटफार्मों पर 2.6.x है। Stdin परिवर्तन stdout के लिए एक हैंडल की आपूर्ति क्यों करेगा, और सर्वर प्रतिक्रियाएं कहां चली गईं?
क्या आपने 'ftplib' का उपयोग करने पर विचार किया है? http://docs.python.org/library/ftplib.html –
आप किस कारण से ftplib का उपयोग नहीं कर सकते हैं। यह आपके पायथन वितरण के साथ आता है? – ghostdog74