【发布时间】:2014-05-19 10:14:42
【问题描述】:
我写了一段简单的代码:
import subprocess
p=subprocess.Popen('mkdir -p ./{a,b,c}', shell=True, stderr=subprocess.STDOUT)
p.wait()
不幸的是,它并不总是像我期望的那样运行。即,当我在 PC 上运行它时,一切正常(ls -l 给了我三个目录:a、b 和 c)。但是当我的同事在他的桌面上运行它时,他得到......一个名为:'{a,b,c}' 的目录......我们都使用 Python 2.7.3。这是为什么?你会如何解决它?
我试图自己找到答案。根据手册: "args 应该是程序参数序列或单个字符串。默认情况下,如果 args 是序列,则要执行的程序是 args 中的第一项。如果 args 是字符串,则解释取决于平台,如下所述。有关与默认行为的其他差异,请参阅 shell 和可执行参数。除非另有说明,否则建议将 args 作为序列传递。"
所以我尝试在shell中执行代码:
python -c "import subprocess; p=subprocess.Popen(['mkdir', '-p', './{ea,fa,ga}'], shell=True, stderr=subprocess.STDOUT); p.wait()"
我得到了:
mkdir: missing operand
如果您有任何建议,我将不胜感激
谢谢!
【问题讨论】:
-
您(和您的同事)在什么操作系统上运行它?如果都是linux,你用的是什么shell?
-
不同的shell可能会给出不同的结果。
-
@endragor 我不认为这是重复的。这个问题是关于
./{a,b,c}语法,而不是mkdir -p命令本身。