2016-06-23 52 views
-5

私は入力ファイルからバッファを読み込み、出力ファイルに書き込もうとしていますが、動作していません。 ここは私のスニペットです。Pythonからsedコマンドを実行

nums = 54466 
nume = 78954 
input_file=open(sys.argv[1],"r"); 
out_file = open(outp, "w") 
subprocess.call(['sed', '-n', ''nums,numep'', input_file], stdout=out_file) 

私のコードに間違いがありますか?

+1

「nums、numep」とは何ですか?二重引用符で何かを引用しようとしていますか? – khelwood

+0

あなたが得たエラーは何ですか? – AbrahamB

+2

どうして 'sed'をPythonから実行したいのですか? – spectras

答えて

0

多分あなたは$ LINE1とLINE2 $の間に線を印刷するには

sed -n '$LINE1,$LINE2p' input_file 

を呼び出そうとしています。

Python文字列置換は異なる方法で動作します - 私はあなたが実装する方がいいでしょう確信している

"'%s,%sp'" % (nums, nume) 

または

"'{},{}p'".format(nums, nume) 
0

''nums,numep'' 

を交換してみてください論理内にあり、sed、しかし、このような何かが働くだろう:

あなたが sedを実行してはならない理由だけで実証
import subprocess 
#set output_file and input_file 
nums = 54466 
nume = 78954 
cmd = "sed -n '{s},{e}p' {i} > {o}".format(i=input_file,o=output_file,s=nums,e=nume) 
subprocess.call(cmd,shell=True) 
0

...

from itertools import islice 

nums, nume = 54466, 78954 
with open(sys.argv[1], 'r') as infile, open(outp, 'w') as outfile: 
    for line in islice(infile, nums, nums + nume): 
     outfile.write(line) 

これは単純に、あまりエラーが発生しやすいと外部プログラムを呼び出すことがより移植性があります。

+1

Python 2のwith文[itemsで区切られた複数のコンマを受け入れる](https://docs.python.org/2/reference/compound_stmts.html#the-with-statement) –

+0

いいえ、私は2.6から3に直接行ったので、私はすべてのアップデートに従わなかった。コメントしてくれてありがとうございます。 – spectras

関連する問題