मैं बाहरी प्रोग्राम से मानक आउटपुट प्राप्त करने के लिए इस कोड का उपयोग कर रहा हूं:
>>> 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
मैंने सोचा था कि यह Binascii.b2a_qp () विधि के लिए है, लेकिन जब मैंने इसे आज़माया, तो मुझे फिर से वही बाइट सरणी मिली:
>>> 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 में क्या है, इस पर निर्भर करते हुए, 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)काम क्यों नहीं करता? यह मुझे विचित्र लगता है।