在envoy中使用rm *(通配符):没有这样的文件或目录

时间:2012-07-30 13:12:09

标签: python wildcard rm python-envoy

我正在使用Python和Envoy。我需要删除目录中的所有文件。除了一些文件,目录为空。在终端中,这将是:

rm /tmp/my_silly_directory/*

常识要求在使节中,这转化为:

r = envoy.run('rm /tmp/my_silly_directory/*')

然而:

r.std_err -> "rm: cannot remove `/tmp/my_silly_directory/*': No such file or directory"

在这种情况下,自然会有使用特使的替代方案,我只是想知道为什么它不起作用。

任何线索?

1 个答案:

答案 0 :(得分:5)

在UNIX上,由shell来解释像*这样的通配符。如果你执行一个程序并将带有*的参数直接传递给程序 - 这可能就是在这里做的 - 那么你会得到一个像你所看到的错误。 rm只假设*是文件名,实际上,实际上可以创建这样的文件。

一种解决方案可能是执行shell并让它代表您执行命令,例如

r = envoy.run('sh -c "rm /tmp/my_silly_directory/*"')

shell会在调用*之前解释rm