2013-06-13 1 views
3

두 개의 파이썬 스크립트가 있습니다. 첫 번째 스크립트는 제 3 자 파이썬 스크립트를 실행해야하는 두 번째 스크립트 테이블을 호출합니다. 다음과 같이 보입니다.os.system 대 리눅스에서 파이썬의 서브 프로세스

# the call from the first script. 
cmd = "qsub -sync y -b -cwd -V -q long -t 1-10 -tc 5 -N 'script_two' ./script2.py" 

script2thread = pexpect.spawn(cmd) 

# end of script 1 

그래서 여기서 10 개의 작업을 대기열로 보냅니다. 스크립트 2에서는 task_id를 기반으로 case 문이 있습니다. 각각의 다른 매개 변수를 사용하여 제 3 자 스크립트에 비슷한 호출을합니다.

... 
elif(task_id == 4) 
subprocess.call(./script3) 

# or 

os.system(./script3 , shell=True) 

내 질문이있는 곳입니다. 하나 또는 다른 것을 사용하는 것과 차이점/이점이 있습니까? 나는 다른 하나 이상을 사용하는 윈도우에서 지원 문제로 인해 큰 차이를 만들지 만, 나는 리눅스에 있고 창에서 이것을 실행할 의도가 없다는 것을 알고있다. 때로는 하위 프로세스를 사용하여 매우 이상한 결과를 얻습니다. 세 번째 스크립트가 독립적으로 한 번에 하나씩 실행될 때 네트워크에서 다른 것을 찾을 수 없습니다.

+0

[파이썬에서 외부 명령 호출] 가능한 복제본 (https://stackoverflow.com/questions/89228/calling-an-external-command-in-python) – Nabin

답변

8

subprocess을 사용해야합니다. 어떤 차이점이있는 것은 아니며, os.system (드롭 인 대체에 대해서는 this section을보십시오)을 대체하기위한 새로운 모듈 일뿐입니다. 또한 필요할 때를 대비하여 더 많은 기능을 갖추고 있습니다.

요약하면 os.system을 사용할 이유가 없습니다 (이전 버전의 Python과의 호환성 제외).

+0

새로운 기능이 필요없는 경우 : 하위 프로세스를 사용해야하는 이유가 있습니까? ('os.system'의 장점은보다 쉬운 문법입니다.) –

+0

@MartinThoma 아니요, 나는 거기 있다고 생각하지 않습니다. 음, 문서에 따르면'os.system '의 반환 값은 OS에 따라 다르므로 오류 처리가 덜 신뢰할 수 있습니다. 보조 노트로서'os.system ("mycmd"+ "myarg")'이'subprocess.call ("mycmd"+ "myarg", shell = True)'보다 얼마나 쉬운 지 나는 알지 못한다. – kirelagin

+0

서브 프로세스가 모든 인수를리스트로 분할 할 필요가 없지만 명령의 길이에 관계없이'os.system'에 단일 문자열을 제공 할 수 있습니까? –

관련 문제