在Slurm任务中,如何将Python -m调用的单行命令的stdout/stderr导出到同一文件?
解决方法
以下几种单行写法均可实现将命令的标准输出(stdout)和标准错误(stderr)合并导出到同一文件,且不会让重定向符号被识别为Python命令的参数:
- 方法1:使用合并重定向符号
&>(最简洁的bash原生写法)
python3 -m module.function --Arg1 Val1 --Arg2 Val2 --Arg3 Val3 &> Output.txt
&>是bash专属语法,会直接将stdout和stderr的内容一并写入指定文件。
- 方法2:显式关联stderr到stdout(兼容更多POSIX标准shell)
python3 -m module.function --Arg1 Val1 --Arg2 Val2 --Arg3 Val3 > Output.txt 2>&1
其中2>&1表示将文件描述符2(对应stderr)的输出重定向到文件描述符1(对应stdout)的目标位置,最终两者内容都会写入Output.txt。
- 方法3:用子shell包裹命令(前两种方法失效时的备选方案)
( python3 -m module.function --Arg1 Val1 --Arg2 Val2 --Arg3 Val3 ) &> Output.txt
括号会创建一个独立的子shell环境,bash会优先解析子shell外部的重定向符号,彻底避免重定向语法被Python命令误判为参数。
内容的提问来源于stack exchange,提问作者Ahmed El-Gabbas
相关产品推荐
相关产品推荐

