参考我在 SuperUser 的问题,我面临一个令人费解的情况,即使用du -sh /media/ExternalHd/myfolder/*
终端按预期工作,但p=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE)
在 python 脚本中使用显示error du: cannot access /media/ExternalHd/myfolder/*: No such file or directory
问问题
827 次
2 回答
2
终端会为您扩展 *。告诉子进程这样做:
p=subprocess.Popen('du -sh /tmp/*', shell=True)
或者,如果您需要更多控制,您可以使用 glob 模块自己扩展 *
于 2012-11-28T02:16:08.247 回答
0
您应该将参数添加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 to another stackoverflow question。
于 2012-11-28T02:19:28.947 回答