在许多文件上运行python脚本的问题

时间:2012-08-13 04:09:32

标签: python linux bash shell

我在Linux(Ubuntu 11.10)机器上;伯恩再次炮轰。

我必须使用python脚本处理一个充满文件的目录。我的同事编写了python脚本,我之前在一个文件上成功使用过它。它需要两个参数:一个用引号括起来的待处理文件的路径和一个名为-min的辅助参数,它需要一个整数。此外,脚本写入标准输出。

根据我的shell脚本编写经验以及本论坛的其他人,我使用以下方法迭代文件目录:

for f in path/to/data_directory/*; do
  path/to/pythonscript.py $f -min 1 > path/to/out_directory/$f;
done

我在out_directory中获得了所需的文件名。每个内容只是python脚本可以编写的内容。也就是说,上面的for循环成功地将文件传递给脚本。但是,每个文件的内容的性质是完全错误的(因为在计算中脚本的确是错误的)。当我在data_directory中的一个文件上运行python脚本时,输出文件具有正确的内容(脚本执行的计算是正确的)。

使它更复杂的是,同一个shell方法(for循环)在我的同事的Mac OS X中完美运行。

问题出在哪里?我错过了关于Linux shell的一些非常基础的东西吗?也许是语法错误?

任何帮助将不胜感激。

更新:我刚刚再次运行for循环但是没有将其指向文件的data_directory,而是将其指向data_directory中的文件。我遇到了同样的问题 - python脚本没有计算出正确的结果。

2 个答案:

答案 0 :(得分:1)

我看到的唯一问题是文件名可能包含空格 - 所以你应引用文件名:

for f in path/to/data_directory/*; do
  path/to/pythonscript.py "$f" -min 1 > "path/to/out_directory/$f"
done

答案 1 :(得分:0)

嗯,我不知道这是否有帮助。

path/to/pythonscript.py $f -min > path/to/out_director/$f

替换

path/to/pythongscript.py path/to/data_directory/myfile -min 1 > path/out_directory/path/to/data_directory/myfile

脚本应该是

cd path/to/data_directory
for f in *; do
path/to/pythonscript.py $f -min 1 >  path/to/out_directory/$f
done

你在运行什么版本的bash?

如果你运行这个脚本会得到什么?

cd path/to/data_directory
for f in *; do
echo $f > /tmp/$f
done

当然应该会给你一堆包含自己文件名的文件。