বাহ্যিক প্রোগ্রাম থেকে মানক আউটপুট পেতে আমি এই কোডটি ব্যবহার করছি:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
যোগাযোগ () পদ্ধতিটি বাইটগুলির একটি অ্যারে প্রদান করে:
>>> command_stdout
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
তবে আমি আউটপুটটির সাথে সাধারণ পাইথন স্ট্রিং হিসাবে কাজ করতে চাই। যাতে আমি এটি এইভাবে মুদ্রণ করতে পারে:
>>> print(command_stdout)
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1
-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2
আমি ভেবেছিলাম যে বিনাসি.ইবি 2 এ_কিপি () পদ্ধতিটি এর জন্য, তবে যখন আমি এটি চেষ্টা করেছি তখন আবার একই বাইট অ্যারে পেয়েছি:
>>> binascii.b2a_qp(command_stdout)
b'total 0\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file1\n-rw-rw-r-- 1 thomas thomas 0 Mar 3 07:03 file2\n'
আমি কীভাবে বাইটের মানটিকে আবার স্ট্রিংয়ে রূপান্তর করব? মানে, "ব্যাটারি" ম্যানুয়ালি না করে ব্যবহার করা। এবং আমি পাইথন 3 এর সাথে ঠিক আছে তা চাই।
str(text_bytes)
এনকোডিং নির্দিষ্ট করতে পারে না। টেক্সট_বাইটে কী রয়েছে তার উপর নির্ভর করে text_bytes.decode('cp1250
) `এর ফলে খুব আলাদা স্ট্রিং হতে পারে text_bytes.decode('utf-8')
।
str
ফাংশন একটি বাস্তব স্ট্রিং রূপান্তর করে না। একজন কোনও কারণে কোনও এনকোডিং স্পষ্টভাবে বলতে চাইছেন কেন আমি তা পড়তে অলস হই। কেবল এটিকে রূপান্তর করুন utf-8
এবং দেখুন আপনার কোডটি কাজ করে কিনা। উদাহরণস্বরূপvar = var.decode('utf-8')
unicode_text = str(bytestring, character_encoding)
কাজ পাইথন 3. যদিও উপর আশানুরূপ unicode_text = bytestring.decode(character_encoding)
শুধু -এর সঙ্গে গুলিয়ে না আরো বাঞ্ছনীয় str(bytes_obj)
যে জন্য একটি টেক্সট প্রতিনিধিত্ব উৎপন্ন bytes_obj
পাঠ্যে এটি ডিকোডিং পরিবর্তে: str(b'\xb6', 'cp1252') == b'\xb6'.decode('cp1252') == '¶'
এবংstr(b'\xb6') == "b'\\xb6'" == repr(b'\xb6') != '¶'
str(text_bytes)
কাজ করে না ? এটি আমার কাছে উদ্ভট বলে মনে হচ্ছে।