2016-12-19 18 views
0

私は、このサブプロセスcmdを実行すると、返される型は、それが代わりに5つの文字列のリストですので、私はこの出力を処理するにはどうすればよいsubprocesss.check_output()を文字列からのリストに変換するにはどうすればよいですか?

s3_ls = subprocess.check_output(["aws", "s3", "ls", s3_loc, "-- 
recursive", "--profile", "RoleName"]) 

2016-11-17 23:34:45   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/category 
2016-11-17 23:34:46   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/ 
2016-12-05 17:37:25  234059 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/entity.01.csv.gz 
2016-11-17 23:34:47   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/ 
2016-12-05 17:37:31  109015 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/entity.02.csv.gz 

をコンソールに出力5行があるにもかかわらず、文字列です。ちょうど大きな長いものの?私はリスト(私のサブプロセスcmd)でそれをラップしようとしましたが、それはただ一つの文字要素にすべてを分割します。

私が何をしたいのか、ファイルのリストがそれを分割について

答えて

2

何より上のpythonサブプロセスcmdを実行した後に戻ってきたのですか?

s3_ls.split('\n') 
+0

を私はそれはそれで改行を持っていたとは思いませんでした線ではなく、文字を無駄なく数える。だから私はこれを試してみたことはありません。ありがとう。 –

+0

私はそれがどうだったか分かりません。 'len(s3_ls)'を試して、 'len(s3_ls.replace( '\ n'、 ''))'と比較してください。 – quapka

0

私はあなたがs3コマンドによって与えられた出力を変えることができるかどうかはわかりませんが、出力が1つの文字列であることを考えます。

>>> re.findall(r'dtop.+', s) 
['dtop_dir/fldr_01/fldr_02/holding/date4y2m/category', 'dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/', 'dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/entity.01.csv.gz', 'dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/', 'dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/entity.02.csv.gz'] 

または::あなたが実行して、ファイル名または行全体にそれを分割可能性があり、それは型STRだったと長さWAを示したので、

>>> re.split(r'\n', s) # or s.split('\n') would be the same here 
['2016-11-17 23:34:45   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/category', '2016-11-17 23:34:46   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/', '2016-12-05 17:37:25  234059 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.01/entity.01.csv.gz', '2016-11-17 23:34:47   0 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/', '2016-12-05 17:37:31  109015 dtop_dir/fldr_01/fldr_02/holding/date4y2m/entity.02/entity.02.csv.gz'] 
関連する問題