Python 3.6 EOF 错误和使用 xargs 并行化脚本

Python 3.6 EOF error and using xargs to parallelize scripts

提问人:chr218 提问时间:11/22/2020 最后编辑:wjandreachr218 更新时间:11/22/2020 访问量:62

问:

我正在尝试使用 xargs 在 bash 上并行执行许多 python 脚本。但是,我需要使用 bash“for loop”的标准输出作为我的 python 脚本的标准输入。

我的 bash 脚本:

#Collect number of CPUs
cpus=$( ls -d /sys/devices/system/cpu/cpu[[:digit:]]* | wc -w )

#Collect data.input directories and pass to xargs to execute python scripts.

arr=$(find . ! -path . -mindepth 2 -type d)

DIR_present=$(pwd)
for dir in $arr; do
        cd $dir
        printf '%s\0' "$(pwd)/data.input"
        cd $DIR_present
done | xargs -0 -x -n 1 --max-procs=$cpus python Foo.py

Foo.py 手动执行时可以完美运行。但是,执行此 bash 脚本会导致每个“data.input”出现“EOF”错误:

Traceback (most recent call last):
  File "Foo.py", line 254, in <module>
    data_file = input()
EOFError: EOF when reading a line

谢谢!

  • 改成不起作用。input()raw_input()

  • 正在收集正确的路径。我已经“回显”了这些路径,并用它们手动执行了 Foo.py。data.input

python-3.x bash eof xargs

评论

0赞 wjandrea 11/22/2020
如果你提供一个最小的可重现的例子,那将有很大帮助。首先,所有文件内容似乎都无关紧要,因此请将其删除。在 Bash 脚本本身中改用静态数据。
0赞 wjandrea 11/22/2020
此外,您可能希望通过 ShellCheck 运行脚本。
1赞 chr218 11/22/2020
我实际上想通了,使用“sys.argv[1]”代替“input()”解决了这个问题。

答: 暂无答案