我正在使用此代码从外部程序获取标准输出:
>>> from subprocess import *
>>> command_stdout = Popen(['ls', '-l'], stdout=PIPE).communicate()[0]
Run Code Online (Sandbox Code Playgroud)
communic()方法返回一个字节数组:
>>> 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'
Run Code Online (Sandbox Code Playgroud)
但是,我想将输出作为普通的Python字符串.所以我可以这样打印:
>>> 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
Run Code Online (Sandbox Code Playgroud)
我认为这是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'
Run Code Online (Sandbox Code Playgroud)
有人知道如何将字节值转换回字符串吗?我的意思是,使用"电池"而不是手动操作.而且我希望它能用于Python 3.
这被证明是对python的粗略过渡.这里发生了什么?:
f = open( 'myfile', 'a+' )
f.write('test string' + '\n')
key = "pass:hello"
plaintext = subprocess.check_output(['openssl', 'aes-128-cbc', '-d', '-in', test, '-base64', '-pass', key])
print (plaintext)
f.write (plaintext + '\n')
f.close()
Run Code Online (Sandbox Code Playgroud)
输出文件如下所示:
test string
然后我收到这个错误:
b'decryption successful\n'
Traceback (most recent call last):
File ".../Project.py", line 36, in <module>
f.write (plaintext + '\n')
TypeError: can't concat bytes to str
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Python 2 代码转换为 Python3,但收到以下错误:
Traceback (most recent call last):
File "markovtest.py", line 73, in <module>
get_all_tweets("quit_cryan")
File "markovtest.py", line 41, in get_all_tweets
outtweets = [(tweet.text.encode("utf-8") + str(b" ")) for tweet in alltweets]
File "markovtest.py", line 41, in <listcomp>
outtweets = [(tweet.text.encode("utf-8") + str(b" ")) for tweet in alltweets]
TypeError: can't concat bytes to str
Run Code Online (Sandbox Code Playgroud)
问题在于这个 for 循环:
outtweets = [(tweet.text.encode("utf-8") + " ") for tweet in alltweets]
Run Code Online (Sandbox Code Playgroud)
我曾尝试更改编码以解码或完全删除编码参数,但我无法弄清楚。任何帮助,将不胜感激。