OSX和echo-n上的python
上下文:我在Mac电脑上运行,注意到乱码输出中散布着字符串OSX和echo-n上的python,python,ruby,bash,unix,zsh,Python,Ruby,Bash,Unix,Zsh,上下文:我在Mac电脑上运行,注意到乱码输出中散布着字符串-n。答案是Ubuntu上的sh理解-n标志,而Mac上的sh则不理解 如您所见,python正在向标准输出字符串“-n abc\n”,而不是预期的“abc” os.system调用是否无法分离-n和abc?zsh(倒置的%是zsh表示EOF的方式)和bash都会发生这种情况,不过如果我没有弄错的话,python调用不应该调用任何shell(不是因为我读到任何这样说的内容,而是基于我的常识)(编辑:结果证明我完全错了,系统运行了一个子s
-n
。答案是Ubuntu上的sh
理解-n
标志,而Mac上的sh
则不理解
如您所见,python正在向标准输出字符串“-n abc\n”
,而不是预期的“abc”
os.system
调用是否无法分离-n
和abc
?zsh(倒置的%
是zsh表示EOF的方式)和bash都会发生这种情况,不过如果我没有弄错的话,python调用不应该调用任何shell(不是因为我读到任何这样说的内容,而是基于我的常识)(编辑:结果证明我完全错了,系统运行了一个子shell)
看看ruby是如何做到的:
还有一些测试:
看起来脚本被发送到sh
,但此时shell的环境变量仍然是zsh
。有道理。我没有做任何事情来清理环境。。。可能sh
不会自动设置$SHELL
说明:
[os.system
]是通过调用标准C函数system()实现的
贯彻执行:
system()通过调用/bin/sh-c command执行命令中指定的命令,并在命令完成后返回。在命令执行期间,SIGCHLD将被阻止,SIGINT和SIGQUIT将被忽略
重点是我的
解释如下:
有些shell可能提供与此类似或相同的内置echo命令
效用。最值得注意的是,sh(1)中的内置echo不接受-n选项。
请参阅内置(1)手册页面
您可以自己确认这一点:
$ sh -c "echo -n hello"
-n hello
$ bash -c "echo -n hello"
hello
如中所述,os.system
在子shell中执行命令。根据您的系统,它可能会使用一个shell,该shell的echo
命令不理解-n
如果要确保它使用您选择的shell,请使用subprocess.call
,使用shell=True
和executable='
选项,而不是os.system
这是怎么回事?python-c'导入子流程;子进程调用([“echo”、“-n”、“abc”])”
在osx上测试并正常工作它在我的系统my
Python 2.6.6版