一个简单的子进程命令(python 2.7)," find"不工作

时间:2018-01-28 15:10:28

标签: python subprocess

我不明白为什么我的子进程命令(python 2.7)不起作用。任何的想法?感谢。

In [35]: import subprocess

In [36]: subprocess.call("for f in $(find  _test/  -name *.c -print); do echo hello; done ".split(),shell=True)
f: -c: line 0: syntax error near unexpected token `newline'
f: -c: line 0: `for'
Out[36]: 2

1 个答案:

答案 0 :(得分:1)

您应该删除对.split()的通话; shell将为您分割命令,因为您正在使用shell=True

值得注意的是,该命令不一定像您期望的那样工作。你应该用单引号包围glob,这样它就不会被shell扩展:

for f in $(find _test/ -name '*.c' -print); do echo hello; done

如果您的任何文件名中包含空格,则此命令会将它们视为单独的文件(例如,如果您有一个名为foo bar.txt的文件,则此循环将看到两个文件名foo和{ {1}})。如果您计划在Python中做任何事情而不是炮轰,那么很多更安全。