在 python 子过程中调用 `echo "test"` 给出 `b'\\test"\n'`

问题描述

为什么在 Python 中(Windows 10 上运行 bash 的 Cygwin 终端中的 3.6)

>>> import subprocess
>>> subprocess.check_output(['echo','"test"'])
b'\\test"\n'

注意:令人困惑的一点是主要的反斜线

为了更清楚地说明这一点:

>>> print(subprocess.check_output(['echo','"test"']).decode())
\test"

结果是 Python2.7 给了我预期的结果,但是两个不同的 Python 3 安装给出了错误一个


在我的理解中,subprocess.list2cmdline(x) 在粘贴到终端时应该给出与 subprocess.check_output(x) 完全等效的内容在这种情况下,虽然 subprocess.list2cmdline(['echo','"test"'])==r'echo \"test\"' 并将后者粘贴到终端中时,我确实得到了预期的结果

$ echo \"test\"
"test"

更多测试:

>>> subprocess.check_output(subprocess.list2cmdline(['echo','"test"']))
b'\\test"\n'

但是

>>> subprocess.check_output(['echo','"test"'],shell=True)
b'\\"test\\"\r\n'
>>> subprocess.check_output(subprocess.list2cmdline(['echo','"test"']),shell=True)
b'\\"test\\"\r\n'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)