2012-08-13 55 views
0

我在Linux(Ubuntu 11.10)机器上运行;伯恩再次壳。在许多文件上运行python脚本的问题

我必须用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脚本没有计算出正确的结果。

+1

Upvote究竟是什么? – 2012-08-13 04:17:52

+0

您为单个文件运行的命令是什么?请给我们一个例子。 – Yamaneko 2012-08-13 04:33:13

+0

'path/to/pythonscript.py'path/to/data_directory/10000.original_indels.ss'-min 1> path/to/out_directory/10000.original_indels.ss' – nnarula 2012-08-13 04:34:27

回答

1

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

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

谢谢。我回去检查文件名并且没有空白。 '10000.original_indels.ss'是要处理的数据文件的一个例子。我希望这没有错。 – nnarula 2012-08-13 04:27:55

+0

@nnarula你真的尝试过Maulwurfn的剧本吗?因为他也包括整个路径。你的shell代码似乎取决于当前目录是什么......也许你是从一个文件夹中运行的,该文件夹至少有一些与数据目录中相同的文件名,但具有不同的数据(这就是为什么计算错误) 。 – azhrei 2012-08-13 04:38:19

+0

@azhrei是的,我得到了同样的结果。我坐在'data_directory','out_directory'和包含python脚本的目录之上的一个目录。另外,由于我最终要处理的数据文件的数量,我确保在我工作的目录中没有数据文件或出文件。 – nnarula 2012-08-13 04:41:55

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 

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

+0

是的,我第一次尝试脚本时遇到了这个错误。 Bash说'path/to/out_directory/path/to/data_directory/myfile'不存在。我通过在out_directory中创建一个名为data_directory的目录来解决这个问题[正如我在上面的注释中所解释的,我坐在data_directory,out_directory和包含python脚本的目录之上的一个目录]。我的bash版本是GNU bash,版本4.2.10(1)-release(x86_64-pc-linux-gnu)。 是的,最后一个脚本的输出正是你所说的。 – nnarula 2012-08-13 04:54:06

+0

您已验证for循环中的一个或几个文件失败的直接命令。不只是同一个文件。这可能是一个python问题。 – Codeguy007 2012-08-13 05:00:52

+0

是的,我现在正在data_directory中使用5个文件进行测试,并且我已经单独测试了python脚本,没有对每个脚本使用'for'循环。 python脚本成功运行。我也用另一套替换了5个文件。同样的情况。 – nnarula 2012-08-13 05:13:42