【问题标题】:du -sh behaviour in terminal and from an python script?终端和python脚本中的du -sh行为?
【发布时间】:2012-11-28 01:41:47
【问题描述】:
关于my question at SuperUser,我面临一个令人费解的情况,即在终端使用du -sh /media/ExternalHd/myfolder/* 可以正常工作,但在python 脚本中使用p=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE) 会显示error du: cannot access /media/ExternalHd/myfolder/*: No such file or directory
【问题讨论】:
标签:
python
linux
shell
terminal
du
【解决方案1】:
终端会为您扩展 *。
告诉子进程这样做:
p=subprocess.Popen('du -sh /tmp/*', shell=True)
或者您可以使用 glob 模块自己扩展 *,
如果您需要更多控制
【解决方案2】:
您应该将参数shell=True 添加到您的 subprocess.Popen 函数中。这样您就可以调用 shell 并使用环境变量、文件 glob 等。
p = subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE, shell=True)
但是,您应该避免使用shell=True,因为存在安全隐患,请参阅python subprocess module docs 中的警告。对于像这样的小脚本,也许它不会产生问题,但请记住;)
有关更多详细信息,请参阅this answer 另一个 stackoverflow 问题。