2015-01-26 3 views
0

(ons x 10.10.1) 파이썬 스크립트 내에서 쌍 엔드 합병 (캐스퍼)을 사용하려고합니다. os.system (서브 프로세스 또는 pexpect 모듈 사용을 원하지 않음)을 사용하고 있습니다.os.system에서 래핑 된 명령이 무시됩니다.

os.system("casper %s %s -o %s"%(filein[0],filein[1],fileout)) 
#filein[0]: input file 1 
#filein[1]: input file 2 
#fileout: output prefix (default==casper) 

을 내 스크립트는 세 번째 만이 명령의 2 개 첫 번째 문자열 매개 변수를 해석 시작하지만 일단 기본 접두어로 출력 파일을 일으키는 원인 : 내 스크립트에 여기서 일하지 않는 행은 이름. 필자의 함수는 많은 fastq 파일을 반복하므로 모두 단일 "casper.fastq"파일에 병합됩니다. 무의미한 문자열을 넣고 작동하지 않는 명령의 일부를 엉망으로 만들려고했지만 여전히 오류없이 실행되고 기본 출력은 다음과 같습니다.

os.system("casper %s %s -ldkfnlqdskgfno %s"%(filein[0],filein[1],fileout)) 

도대체 무슨 일이 일어나는지 이해하는 데 도움을 줄 수 있습니까? 제대로 감싸 명령 (파일 이름이 필요처럼 인용되는) 경우 명령이 전에 그것을 실행

+0

또한 os.sytem 반환 값을 확인하려고 했으므로 0이어야하지만 그래도 출력 문제가 발생합니다. –

+0

어둠에 있습니다 - 파일 이름에 공백이 있습니까? 그렇다면''캐스퍼 "% s" "% s"-o "% s"'가 작동 할 수도 있습니다. 'subprocess.call ([ 'casper', filein [0], filein [1], '-o', fileout])'이 작동합니까? – tdelaney

+0

os.system 대신 인쇄물을 사용해 보셨습니까? 문자열이 제대로 구성되었는지 확인하기 만하면됩니다. –

답변

0
  1. 인쇄
  2. 가 잘못 해석되어 있는지 직접 가정 출력 명령을 실행하여 확인합니다.
+0

i ha 이미 명령을 확인하고 인쇄하여 확인한 것 같습니다. 나는 "직접"실행의 의미에 대해 확신하지 못합니까? 만약 당신이 "스크립트 밖에서 인쇄 된 명령을 실행한다면, 터미널에서 : 나는 이상한 일이 일어나고있다 : 여전히 기본 출력을 내게 준다. –

+0

당신의 아이디어는 훌륭했다. 터미널에 인쇄 된 명령을 실행하면 문제가 있음을 알린다. 명령 자체 : 출력 옵션 문제가 있거나 문자열의 파일 이름을 따옴표로 묶어야합니다.이 것을 알아낼 것입니다. 그러나 THX HUAZHIHAO, 그것에 대해 생각해 봐야합니다! 더 많은 단서가 있으면 주저하지 마십시오. 그 (것)들을 공유하십시오 –

+0

완료하십시오! 캐스퍼 공구 조수 장치에서, 진짜로 이상하다, 쓰여진다 : "*** 사용법 : CASPER forward.fastq reverse.fastq [OPTIONS] ***". 그러므로 나의 명령은이다 : "** * casper file1 file2 -o output_prefix *** "하지만 작동하지 않습니다. 파일 입력 대신 옵션으로 시작하는 명령을 다시 형식화합니다."*** casper -o output_prefix file1 file2 *** "WORKS –

관련 문제