2014-01-21 3 views
1

나는 파이썬의 subprocess.call 방법으로 정수 값을 전달하기 위해 노력하고 있습니다 :어떻게 파이썬의 subprocess.call 메소드에 정수 값을 전달할 수 있습니까?

subprocess.call('samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam') 

인수를 '-bq은'정수 값이어야합니다 후. 그러나 나는 subprocess.call 문자열로 취급 계속 믿고 그래서 오류 'TypeError 점점 : bufsize 정수 여야합니다'.

'1'을 정수 값으로 해석하기 위해 subprocess.call을 어떻게 얻을 수 있습니까?

답변

4

이것은 입력 한 정수와 아무 관련이 없습니다. 함수를 잘못 호출하고 있습니다. 이것은, 그러나, 쉘에 의해 처리, 출력 리디렉션 (>)가 작동하지 않습니다되지 않도록

subprocess.call(['samtools','view','-bq', '1','DS130.bam','>','DS130umr.bam']) 

: 당신은 하나의 시퀀스, 목록으로 명령을 전달해야합니다. 처리하는 쉘

subprocess.call('samtools view -bq 1 DS130.bam > DS130umr.bam', shell=True) 

, 또는 출력 재 지정을 사용 : 당신이 다른 파일에 도구의 출력을, 중 shell=True를 사용하여 문자열을 전달하려면

with open('DS130umr.bam', 'wb') as redirected: 
    subprocess.call(['samtools','view','-bq', '1','DS130.bam'], stdout=redirected) 
+0

나는 할 수 있었다 shell = True 인수를 사용하여 subprocess.call을 올바르게 실행하십시오. 그러나 출력 리디렉션을 사용하여 시도 할 때 ValueError : stdout 인수를 사용할 수 없으면이 오류가 발생하여 재정의됩니다. 내가 대신이 일을 끝내고 그것은 일했다 : open ('DS130umr.bam', 'wb') sys.stdout : subprocess.check_output ([ 'samtools', 'view', '-bq', '1' , 'DS130.bam']) – JayKu12

+0

@ JayKu12 : 죄송합니다. 대신'subprocess.call()'을 사용하려고합니다. 당신은'sys.stdout'에 할당하는 것에 조심해야합니다; 이제'sys.stdout = sys .__ stdout__'을 사용하여 원본을 복원해야합니다. –

관련 문제