2017-12-24 28 views
0

이 단어는 제 첫 번째 질문으로, 더 적은 단어로 명확히 밝히지 않으면 유감입니다. 나는 그가 수행하고자하는 작업을 입력하도록 사용자에게 요청하는 python 스크립트를 작성하고 있습니다. 나는 특정 작업 (A와 N)에 두 가지 기능을했습니다. if-else 문을 사용하여 특정 함수를 확인 및 적용하고 전체 출력을 새 파일에 기록했습니다. 파일 핸들을 닫은 후 동일한 확인란 (if-else)에서 다른 함수를 호출하고 있습니다. 약 () 출력을 확인하는 경우 - 다른 사람에 따라 명령 프롬프트에 표시하지만이 내가 지금까지 여기파이썬에서 파일을 닫은 후에 함수 호출 오류가 발생했습니다.

obj = PhysioCal() 
if (args.operation == 'N' or args.operation == 'n'): 
    with open (args.output,"w") as fout: 
     sys.stdout=fout 
     t_n=obj.nucleotide(obj.fasta_reader(args.input)) 
     sys.stdout.close() 
    obj.about(t_n) 
elif (args.operation == 'A' or args.operation == 'a'): 
    with open (args.output,"w") as fout: 
     sys.stdout=fout 
     t_a=obj.amino_acid(obj.fasta_reader(args.input)) 
     sys.stdout.close() 
    obj.about(t_a) 
else: 
    obj.about(0) 
    print("\n\t\t\tProcess Failed") 
    print("\t\t\aYou have seleccted wrong operation") 
    print("\t\tuse -h argument for help menu") 

t_n을 수행하고 한 것입니다

"Value error: I/O operation on closed file." 

을 취득해야한다 t_a은 함수가 복귀하는 시간입니다. 함수에 대한 명령 프롬프트에서 시간을 보여줍니다.

또한 cmd 대신에 파일에 함수의 모든 출력을 가져 오는 방법을 쓰고 있습니까?

+0

왜'sys.stdout'을 덮어 쓰고'sys.stdout.close()'가하고 있다고 생각합니까? 힌트 :'open with '을 사용하고 있기 때문에 그 중 아무 것도 할 필요가 없다. – DeepSpace

+0

'obj.nucleotide'는 암시 적으로 표준 출력을 사용합니까? 그렇지 않으면'fout'이 어떻게 사용되는지 명확하지 않습니다. – chepner

+0

내 함수는'print' 문을 사용합니다. 그래서 나는 모든 ** 인쇄 ** 문장을 내가 쓰고 싶은 파일로 리디렉션하는 방법을 찾고있었습니다. 내가 지금 기억하지 못하는 어딘가에서 이런 식으로 찾았습니다. 다른 방법을 찾지 못했습니다. @DeepSpace –

답변

0

reasigned sys.stdout ~ fout 이후로 프로그램을 더 이상 stdout으로 인쇄 할 수 없습니다. 재 할당없이 직접 fout을 사용하여 쓰기를 할 수 있습니다. 파일에 쓰는 방법은 파이썬 문서를 확인하십시오.

+0

나는 OP가 다양한'obj' 메쏘드의 인자로'fout'을 전달하는 방법을 간과하고 있거나,'sys.stdout'을 조롱 해 이들 메소드가' fout' 대신. – chepner

+0

우리가 가정 할 수있는 구현 방법에 대해서 알지 못합니다. 하지만 OP는 command 함수에 대해 about 함수가 시간을 표시한다고 말했고, t_a의 값을 stdout으로 출력하는 것으로 가정합니다. 그 시점에서 stdout이 닫히기 때문에 오류가 발생합니다. – stormbard

+0

그래서 내가 내 모든 인쇄 문을 파일로 리디렉션하는 방식을 변경해야한다고 생각합니다. –