2010-04-05 2 views
1

외부 편집기에서 데이터를 가져 오는 방법이 필요합니다.외부 프로그램에서 데이터 가져 오기

def _get_content(): 
    from subprocess import call 
    file = open(file, "w").write(some_name) 
    call(editor + " " + file, shell=True) 
    file.close() 
    file = open(file) 
    x = file.readlines() 

    [snip] 

저는 개인적으로보다 세련된 방식이 있어야한다고 생각합니다. 아시다시피, 나는 외부 편집자와 상호 작용하고 데이터를 얻을 필요가 있습니다.

더 나은 접근 방법을 알고 계시거나 더 좋은 아이디어가 있습니까?

편집 :

마르셀로는 그 일을 위해 tempfile을 사용하는 아이디어에 저를 가져왔다.

def _tempfile_write(input): 
    from tempfile import NamedTemporaryFile 

    x = NamedTemporaryFile() 
    x.file.write(input) 
    x.close() 
    y = open(x) 

    [snip] 

이이 일을뿐만 아니라, 매우 만족하지 : 여기

내가 그것을 할 방법입니다. 산란에 대해 뭔가 들어 봤어? ...

+1

귀하의 질문은 매우 모호합니다. 당신은 정확히 무엇을 성취하려고 노력하고 있습니까?이 접근법에 대해 당신은 무엇을 못 찾습니까? 그것은 "사용자가 텍스트를 입력하고 해당 텍스트를 문자열로 가져와야합니다"입니까? "기존 파일을 편집하려면 사용자가 필요합니까?" 새 편집기 프로세스를 생성하는 방법이나 사용자로부터 입력을받는 방법을 묻는 중입니까? – RarrRarrRarr

+0

나는 사용자로부터 입력을받는 것에 대해 이야기하고있다. :) 나는 추악한 말은 옳은 말이 아니라는 것을 인정한다. 어쩌면 말하기를, 나는 이것을하는 더 우아한 방법을 찾고있다. –

답변

2

내가 목록을 사용하는 것이 좋습니다 것,하지 문자열 :

def _get_content(editor, initial=""): 
    from subprocess import call 
    from tempfile import NamedTemporaryFile 

    # Create the initial temporary file. 
    with NamedTemporaryFile(delete=False) as tf: 
     tfName = tf.name 
     tf.write(initial) 

    # Fire up the editor. 
    if call([editor, tfName]) != 0: 
     return None # Editor died or was killed. 

    # Get the modified content. 
    with open(tfName).readlines() as result: 
     os.remove(tfName) 
     return result 
+0

감사합니다 마이크. 좋은 생각이야. –

+1

GAH가 정당성을 잊었 : 당신은 call'와'쉘'에 목록을 사용하려면 = FALSE '는 때문에 당신은 ('', 공간 등을 &', ';)를 파일 이름에 모든 문자를 이스케이프에 대해 걱정할 필요가 없습니다 쉘은 특별한 의미를 부여합니다. 허락하면,'NamedTemporaryFile'은 당신에게 그 문자들로 된 파일 이름을 주어서는 안되지만 들어갈 좋은 습관입니다. –

+0

그 힌트를 가져 주셔서 감사합니다! –

3

모든 프로그램에서 AFAIK 방식을 사용합니다. 물론 내가 사용한 모든 버전 제어 시스템은 임시 파일을 만들고 편집기로 전달하고 편집기가 종료 될 때 결과를 가져 오는 것과 같습니다.

+0

임시 파일을 언급하는 것이 좋았습니다. 나는''tempfile''이라는 이름의 좋은 파이썬 모듈을 발견했습니다. 나는 이것이 처음부터 훌륭하다고 생각한다. –

1

편집기는 대화 형으로 파일을 편집 할 수 있습니다. 파이썬으로 파일을 편집 할 수도 있습니다. 외부 편집기를 호출 할 필요가 없습니다.

for line in open("file"): 
    print "editing line ", line 
    # eg replace strings 
    line = line.replace("somestring","somenewstring") 
    print line 
+0

예, 알고 있습니다. 비록 내가 사용자 입력을 얻고 그 데이터를 즉시 처리해야만 데이터베이스에 그것을 모두 저장해야한다. 그렇지 않으면 나는 그렇게 할 것이다. :) –