0

参考我在 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

4

2 回答 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 回答