os.getcwd上两级_os.system(“pwd”)和os.getcwd()之间的区别

发现绩效问题的最好方法是自己衡量。Python实现各不相同。同样,如果您想了解它们是如何实现的,那么请阅读源代码。

所有这些机制都可能在类UNIX系统上调用相同的底层C库接口getcwd(3)。只是有些人用外部程序来达到目的。

os.system("pwd")运行一个shell(第一个进程)来运行外部程序pwd(第二个进程)。因此性能会很差,而且不可移植,因为pwd不是在所有支持Python的平台上都实现的。输出到stdout,它不会被捕获以在程序中使用。

您省略了函数popen:wd = os.popen('pwd').readline()

这被认为是过时的,os.system()也是,两者都被subprocess取代。popen实现可能使用C运行时库函数popen,该函数还调用shell来执行命令,因此性能可能很差。

subprocess模块是用来替换这些旧接口的,因此是重复的。一个优点是shell的使用是可选的,在这种情况下您不需要它。但你的代码不完整:proc = subprocess.Popen(['pwd'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

wd, err = proc.communicate()

if err:

print >> sys.stderr, err

else:

print wd,

这将更加有效,因为没有shell进程。但实际上你应该在自己的系统上对它进行基准测试。

到目前为止,所有的接口都是通用-它们用于运行各种命令和外部程序。它们经常被滥用和不当使用,这反映了程序员缺乏理解(或懒惰)。

我们只剩下os.getcwd()。它可能是作为对C库接口的直接调用来实现的,但可能会绕过它来调用内核。检查实现的源代码。没有子进程,所以速度更快。

您关于复制的观点也可以用于许多其他接口,os.remove(),os.mkdir(),os.stat(),等等。关键是这些程序速度快,可移植,不运行其他程序。

与使用shell相比,使用Python这样的语言有这些直接接口是一个主要优势。Bash没有用于获取当前目录、获取文件大小、删除文件等的内置命令。它依赖于外部程序——python没有。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值