मैं पायथन 3.2.2 पर काम कर रहा हूं। उपयोगकर्ता के पास कंसोल पर मान दर्ज करने का विकल्प होता है या यदि वह केवल ENTER हिट करता है तो डिफ़ॉल्ट मान का उपयोग करने देता है। जैसे यदि उपयोगकर्ता ENTER दबाता है, तो मान c:\temp पर सेट हो जाता है जैसा कि नीचे दिए गए कोड स्निपेट में दिखाया गया है:

READ=os.read(0,100)
if READ == "\n" :
  READ="c:\\temp"

यह कोड अजगर 2.7 में काम करता था, लेकिन यह अजगर 3.2.2 पर काम नहीं करता है।

3.2.2 में, READ खाली रहता है। इस कोड को बेहतर बनाने के लिए कृपया कोई सुझाव?

2
ShandM 7 नवम्बर 2011, 16:01
यह बताने में मददगार हो सकता है कि यह काम क्यों नहीं करता है ...
 – 
CharlesB
7 नवम्बर 2011, 16:11
2
सिर्फ input() के बजाय os.read(0, 100) क्यों?
 – 
Chris Morgan
7 नवम्बर 2011, 16:20
2
ऐसे मामलों में, आपको इसे हल करने में सक्षम होना चाहिए; आरंभ करने के लिए, print(repr(READ))
 – 
Chris Morgan
7 नवम्बर 2011, 16:22

2 जवाब

सबसे बढ़िया उत्तर

फ़ंक्शन os.read पायथन 2.7 में class str देता है, लेकिन class bytes पायथन 3.2 में। तो अजगर 3.2 में, if READ == "\n": READ="C:\\temp" True कभी नहीं होगा। आप इस तरह बदल सकते हैं:

if str(READ,"ascii") == os.linesep: READ = "C:\\temp"

शायद, अधिक सटीक:

import os,sys
READ = os.read(0,100)
if str(READ,sys.stdin.encoding) == os.linesep:
   READ = "C:\\temp"
7
Vivodo 7 नवम्बर 2011, 16:32
धन्यवाद। मैंने इसे os.linesep में बदल दिया।
 – 
Vivodo
7 नवम्बर 2011, 16:32
1
बहुत बहुत धन्यवाद। "अगर str (पढ़ें," ascii ") == os.linesep" काम किया।
 – 
ShandM
7 नवम्बर 2011, 16:45

पायथन 3 ने बनाया है स्ट्रिंग हैंडलिंग में परिवर्तन, इसलिए os.read() बाइनरी स्ट्रिंग लौटाता है।

कोड के साथ तय किया जाना चाहिए

if READ == b'\n' :
  READ="c:\\temp"
1
CharlesB 7 नवम्बर 2011, 16:24