繁体   English   中英

无法从控制台捕获新行并将其保存到文本文件中

[英]Unable to capture new lines from a console and save them into a text file

以下源代码应该从控制台捕获 output 并将其保存到文本文件中。

import sys
import subprocess
sys.stdout = open("my_app.txt", "w")
print(subprocess.check_output(
        ['./my_app', 
        '-length=7', 
        '-all', 
        '-file_names=tmpl.txt']        
        ), 
      '\n'
    )
sys.stdout.close()

以上源码预计output以下output:

1a62  A    4 THR H CCHHHHH 7.042 5.781 5.399 5.373 5.423  -9.118     
1a62  A    5 GLU H CHHHHHC 5.781 5.399 5.373 5.423 5.247   5.488   
1a62  A    6 LEU H HHHHHCC 5.399 5.373 5.423 5.247 5.485   5.166  

但是,我收到以下 output:

1a62  A    4 THR H CCHHHHH 7.042 5.781 5.399 5.373 5.423  -9.118\n1a62  A    5 GLU H CHHHHHC 5.781 5.399 5.373 5.423 5.247   5.488\n1a62  A    6 LEU H HHHHHCC 5.399 5.373 5.423 5.247 5.485   5.166  

换句话说, stdout上的新行没有被正确识别/捕获/解析。

我该如何解决这个问题?

来自文档

对于stdin ,输入中的行结束字符'\n'将被转换为默认的行分隔符os.linesep 对于stdoutstderr ,output 中的所有行结尾都将转换为“\n”。 有关更多信息,请参阅io.TextIOWrapper class 的文档,当其构造函数的换行参数为None时。

从那以后,如果您使用 Python 3.7+,您应该添加text=True参数,否则universal_newlines=True 文件

print(subprocess.check_output([
    './my_app',
    '-length=7',
    '-all',
    '-file_names=tmpl.txt'
], text=True),
    '\n'
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM