我有一个python脚本(称之为my_python_script.py
),它使用
print message_string
它还使用
输出百分比进度sys.stdout.write(progress_string)
完成后,它会输出一些统计信息,因为我后来想通过stderr
收集文件中的那些,我使用
sys.stderr.write(stats_string)
现在,在另一个脚本中,我使用subprocess.check_call()
调用上面的脚本
file_obj = open('stats.log', 'a')
check_call(['my_python_script.py'], stderr=file_obj)
file_obj.close()
令我惊讶的是,file_obj
包含my_python_script.py
的所有输出,包括print
输出,sys.stdout.write
输出和sys.stderr.write
输出。我预计它只包含sys.stderr.write
的输出。
为什么不是这样? check_call
默认情况下会stderr
重定向到stdout
吗?
如果有一个简单的解决方案,我将是一个快乐的露营者。感谢。
顺便说一下,我在Linux Fedora上使用Python 2.7。
答案 0 :(得分:0)
您也可以尝试添加stdout选项:
check_call(['my_python_script.py'], stdout=anotherfile_obj, stderr=file_obj)
我的猜测是check_call
在未指定stderr
时将stdout
视为stdout
。
或者,或者您的脚本默认打印到stderr
答案 1 :(得分:0)
我最诚挚的向社区道歉!!
这对我来说完全是个错误。
这个错误的关键是双重的。
第一部分是这个定义
file_obj = open('stats.log', 'a')
注意'a' - 这是故意但是问题的一部分。其次,我忘记在完成后删除生成的文件(它应该是临时的,并在最后复制到不同的位置)。因此,我的所有测试运行累积到此文件中,包括我使用stdout的初始文件。
哦,主啊。所以问题是:我应该删除原始问题还是可以用于说明目的?现在看起来很蠢。