Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在多个文件上运行python脚本时出现问题_Python_Linux_Bash_Shell - Fatal编程技术网

在多个文件上运行python脚本时出现问题

在多个文件上运行python脚本时出现问题,python,linux,bash,shell,Python,Linux,Bash,Shell,我在一台Linux(Ubuntu11.10)机器上;伯恩又来了 我必须用python脚本处理一个满是文件的目录。我的同事编写了python脚本,我以前曾成功地在一个文件中使用过它。它有两个参数:一个是要处理的文件的路径,用引号括起来,另一个是名为-min的辅助参数,它需要一个整数。此外,脚本还会写入标准输出 根据我在shell脚本编写方面的经验以及本论坛上的其他经验,我使用了以下方法来迭代文件目录: for f in path/to/data_directory/*; do path/to/

我在一台Linux(Ubuntu11.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\u目录
中获得所需的文件名。每个脚本的内容只有python脚本才能编写。也就是说,上面的for循环成功地将文件传递给脚本。但是,每个文件内容的性质是完全错误的(就像脚本所做的计算是错误的一样)。当我在
data\u目录
中的一个文件上运行python脚本时,输出文件具有正确的内容(脚本执行的计算是正确的)

使它更复杂的是,相同的shell方法(for循环的
方法)在我的同事的MacOSX中工作得非常好

问题在哪里?我是否遗漏了Linux shell的一些非常基本的东西?也许是语法错误

任何帮助都将不胜感激


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

我看到的唯一问题是文件名可能包含空格-因此您应该引用文件名:

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

我不知道这是否有用,但是

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

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

Upvote到底是什么?你为单个文件运行的命令是什么?请给我们举个例子。
path/to/pythonscript.py'path/to/data\u directory/10000.original\u indels.ss'-min 1>path/to/out\u directory/10000.original\u indels.ss
谢谢。我回去检查了文件名,它们没有空格<代码>10000。原始索引.ss
是要处理的数据文件的一个示例。我希望这没什么问题。@nnarula你真的试过摩尔乌夫的剧本吗?因为他还包括了整个路径。您的shell代码似乎取决于当前目录是什么。。。也许您运行的文件夹至少有一些与数据目录中相同的文件名,但数据不同(这就是计算错误的原因)。@azhrei是的,我得到了相同的结果。我在
data\u目录
上方的一个目录中,在
out\u目录
和包含python脚本的目录中。另外,由于我最终将要处理的数据文件量很大,我确保在我工作的目录中没有数据文件或out文件。是的,我在第一次尝试脚本时遇到了这个错误。Bash说,
path/to/out\u目录/path/to/data\u目录/myfile
不存在。我在out_目录中创建了一个名为data_directory的目录(正如我在上面的评论中所解释的,我位于data_目录、out_目录和包含python脚本的目录之上)。我的bash版本是gnubash,版本4.2.10(1)-发行版(x86_64-pc-linux-GNU)。是的,最后一个脚本的输出正是您所说的。您已经在for循环中失败的一个或几个文件上验证了STREAT命令。不仅仅是同一个文件。这可能是python的问题。是的,我现在正在使用data_目录中的5个文件进行测试,并且我已经单独测试了python脚本,没有在每个脚本上使用
for
循环。python脚本运行成功。我还用另一组文件替换了这5个文件。相同的场景。python脚本是否可能在for循环的下一个循环开始之前没有完成?我甚至不知道这是可能的,但我对所有这些都相当陌生,所以我愿意接受这个建议。但我不知道如何测试这个案例。还有,为什么它能在我同事的Mac上工作?