以这个示例片段为例。
import subprocess
import os
env = os.environ.copy()
env["FOO"] = u"foo"
subprocess.check_call(["ls", "-l"], env=env)
Run Code Online (Sandbox Code Playgroud)
在Windows上,这将失败。
C:\Python27\python.exe test.py
Traceback (most recent call last):
File "test.py", line 7, in <module>
subprocess.check_call(["ls", "-l"], env=env)
File "C:\Python27\lib\subprocess.py", line 535, in check_call
retcode = call(*popenargs, **kwargs)
File "C:\Python27\lib\subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python27\lib\subprocess.py", line 710, in __init__
errread, errwrite)
File "C:\Python27\lib\subprocess.py", line 958, in _execute_child
startupinfo)
TypeError: environment can only contain strings
Run Code Online (Sandbox Code Playgroud)
sys.path据证明,使用unicode完全可以。什么可以正确处理此代码(及类似代码)?显而易见的解决方案是调用.encode()unicode路径,但是我不确定这是否会导致意外行为。
这是标准库文档中对该函数的描述.
binascii.a2b_hex(hexstr)
返回十六进制字符串hexstr表示的二进制数据.该函数与b2a_hex()的反函数.hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则会引发TypeError.
但是,以下代码示例打印出来 Hello World!
import binascii
print binascii.a2b_hex('48656c6c6f20576f726c6421')
Run Code Online (Sandbox Code Playgroud)
为什么print将二进制数据解释为字符串?到底发生了什么?
首先,我不确定这个问题是否适合这个问题,所以如果有必要,请随意将其移动到更合适的位置.
cmd_folder = os.path.realpath(os.path.abspath(os.path.split(inspect.getfile( inspect.currentframe() ))[0]))
Run Code Online (Sandbox Code Playgroud)
我有这行代码.Python PEP 8文档建议将行限制为79个字符,以保持较小屏幕的可读性.
设计这一行代码以符合PEP建议的最优雅方式是什么?
cmd_folder = os.path.realpath(os.path.abspath(os.path.split
(inspect.getfile
( inspect.currentframe() ))[0]))
Run Code Online (Sandbox Code Playgroud)
这是否是最合适的方式,是否有一个我没有想过的更好的方法?