6

我正在使用 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"

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

有什么线索吗?

4

1 回答 1

5

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

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

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

shell 将解释*调用之前的rm.

于 2012-07-30T13:15:29.160 回答