2017-01-06 18 views
2
import subprocess 
cmd = 'tasklist' 
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 
file = open("Process_list.txt", "r+") 
for line in proc.stdout: 
     file.write(str(line)) 

file.close() 

私はテキストファイルにプロセスリストを保存しました。しかし、Process_list.txtファイルには\ r \ nのような改行文字がたくさんあります。どうすれば削除できますか?テキストファイルの改行文字を削除するにはどうすればよいですか?

In [1]: 'foo\r\n'.strip() 
Out[1]: 'foo' 

をお使いの場合:あなたはあまりにもwithを使用してclose()にファイルを避けることができ

file.write(str(line).strip()) 

私は

+0

'.strip()'や '.rstrip()'が必要です(例えば、 'file.write(line.rstrip())')。 'line'はほとんど確実に既に文字列なので、変換する必要はありません。また、コンテキストマネージャを使用してファイルを開くための 'with'キーワードを調べるべきです。 – jedwards

+1

実際に 'subprocess.Popen(cmd、shell = True、stdout = subprocess.PIPE)'は 'bytes'を返します。 'file.write(str(line))'の代わりに 'file.write(line.decode( 'ascii')。strip())'を実行します。 – Abdou

+0

'Popen()'はバイトで動作するので、データを 'エンコード/デコード 'する必要があります。バイトモードでファイルを開く必要があるかもしれません。' b'。 – furas

答えて

3

subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)を実行したときに返される内容については、replac ingまたはstripに余分な文字をpingするほどの問題ではない可能性があります。後者は実際にはbytesを返します。これは、各行をファイルに書き込むとうまくいかない場合があります。次のファイルに行を書き込む前にstringbytesを変換することができるはずです。

import subprocess 
cmd = 'tasklist' 
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) 
file = open("Process_list.txt", "r+") 
for line in proc.stdout: 
     file.write(line.decode('ascii')) # to have each output in one line 

file.close() 

あなたは1行に各出力を持ってしたくない場合は、あなたと改行文字を削除することができますfile.write(line.decode('ascii').strip())

また、あなたが実際に文字列の文字の出力を取得し、ファイルに出力を保存するためにsubprocess.getoutputを使用することもできました:

cmd = 'tasklist' 
proc = subprocess.getoutput(cmd) 
file.write(proc) 
file.close() 

私はこれが役立ちたいと考えています。

+0

本当に感謝しています – Gripex

1

あなたは確かに再びstrip()を使用する前に交換し、ストリップFUNC使用しました:

with open("Process_list.txt", "r+") as file: 
    for line in proc.stdout: 
     file.write(str(line).strip()) 

また、str()は、lineの文字列ではありません。

1

おそらく、あなたはstr.rstrip()を探しています。末尾の改行文字と改行文字を削除します。ただし、末尾の空白もすべて削除されるため、注意してください。

関連する問題