【问题标题】:Using rm * (wildcard) in envoy: No such file or directory在特使中使用 rm *(通配符):没有这样的文件或目录
【发布时间】:2012-07-28 04:03:50
【问题描述】:

我正在使用 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 的替代方法,我只是想知道为什么它不起作用。

有什么线索吗?

【问题讨论】:

    标签: python wildcard rm python-envoy


    【解决方案1】:

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

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

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

    shell 将在调用rm 之前解释*

    【讨论】:

    • 这听起来完全正确,并且可能适用于子进程。然而,在 envoy 中,出于某种原因,唯一有效的电话是envoy.run([["sh", "-c", "rm /tmp/my_silly_directory/*"]])。这么简单的subprocess ;)
    • 顺便说一句,无法让它与子流程一起使用。与原始问题相同的错误。
    猜你喜欢
    • 2018-01-17
    • 1970-01-01
    • 2016-05-09
    • 2015-04-23
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多