栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

subprocess.Popen(“ echo $ HOME”…和subprocess.Popen([“ echo”,“ $ HOME”]之间有什么区别

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

subprocess.Popen(“ echo $ HOME”…和subprocess.Popen([“ echo”,“ $ HOME”]之间有什么区别

第一个参数

subprocess.Popen()
告诉系统要运行什么。

当它是列表时,您 需要
使用

shell=False
。它恰好在Windows中如您所愿地起作用。但是在类Unix平台上,您只是传递了许多通常会被忽略的参数。有效,

/bin/sh -c 'echo' '$HOME'

这只会导致第二个参数不被使用(在这里我使用单引号来强调它们只是静态字符串)。

以我的拙见,在这种情况下,Python应该抛出一个错误。在Windows上也是如此。这是一个错误,应捕获并报告。

(在相反的情况下,

shell=False
指定,但您传递的字符串不是有效命令的名称,无论如何您最终都会得到一个错误,并且即使您对正在发生的事情有一个模糊的想法也是有道理的。)

如果您真的知道自己在做什么,则可以使第一个参数访问后续参数;例如

/bin/sh -c 'printf "%sn" "$@"' 'ick' 'foo' 'bar' 'baz'

将在单独的行上打印

foo
bar
baz
。(这里使用“
zeroth”自变量-
'ick'
来填充
$0
。)但这只是一个晦涩难懂的推论。不要试图将其用于任何事情。

另外,

subprocess.Popen()
如果只想运行命令,则不要使用。该
subprocess.run()
文档讲述了这一些更多的细节。随着
text=True
你得到一个字符串,而不是字节。

result = subprocess.run('echo "$HOME"', shell=True,    text=True, capture_output=True, check=True)print(result.stdout, result.stderr)

当然,还

os.environ['HOME']
可以让您
$HOME
在Python中访问的值。这也使您可以避免
shell=True
,如果可以的话,通常应避免这种情况。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号