Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OSX和echo-n上的python_Python_Ruby_Bash_Unix_Zsh - Fatal编程技术网

OSX和echo-n上的python

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

上下文:我在Mac电脑上运行,注意到乱码输出中散布着字符串
-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版