2017-02-18 41 views
1

我有這個代碼從python運行minecraft服務器並在命令行中打印所有內容。然而,在每一行的結尾打印「\ r \ n」,我不希望它,有什麼辦法擺脫它?Python如何不打印 r和 n

import subprocess 

def run_command(command): 
    p = subprocess.Popen(command, 
        stdout=subprocess.PIPE, 
        stderr=subprocess.STDOUT) 
    return iter(p.stdout.readline, b'') 

for output_line in run_command('java -Xmx2048M -Xms2048M -jar minecraft_server.jar nogui'): 
    print(output_line) 

回答

2

您可以編寫直接標準輸出:

import sys 
sys.stdout.write("Hello world!") 
sys.stdout.write(" I'm superman :D") 

上面的代碼應在同一行


打印按照要求,好像OP想要打印的長字符串嵌入斷路器,但不希望斷路器有效。

比方說,我有一個具有兩行

Hey line 1! 
I'm line 2. 

下面的代碼將打印兩行沒有線路斷路器的文本文件,用空格代替線斷路器:

txt = '' 
with open('somename.txt', 'r') as f: 
    txt = f.read().replace('\r\n', ' ') 
    txt = txt.replace('\n\r', ' ') 
    txt = txt.replace('\n', ' ') 
    txt = txt.replace('\r', ' ') 
print txt 

也就是說,將打印

Hey line 1! I'm line 2. 

您還可以解析行,然後打印每一行,而無需lin e斷路器:

for line in f: 
    sys.stdout.write(line.strip() + ' ') 

希望這是你想要的。

+0

不要忘了'sys.stdout.flush()' –

+0

我不希望它在同一行上打印,我希望它打印多行,但事情是,它是在每行的末尾添加「\ r \ n」,我不想要那個 –

+0

@JC我認爲\ r是反覆出現的,\ n是換行符。那麼如果你沒有一個人在行的末尾會發生什麼? – Mai

2

使用

print('Minecraft server', end="") 

或者

print(output_line.rstrip()) 
+0

python 2:打印'我的世界服務器',#注意到最後的逗號 – MosheZada

+0

我假設你的意思是print(output_line,end =「」),那沒用,程序沒有打印任何東西 –

+0

工作? @ J.C。 –