2011-12-12 9 views
6

에서 "apt-get install xxx"를 사용하면 현재 OS에 따라 apt 또는 rpm을 사용하여 패키지를 설치해야합니다. 시스템을 업데이트하거나 업그레이드하기 위해 "적절한"lib 디렉토리를 보았지만 하나의 패키지를 설치하는 데 사용할 수 있습니까? 나도 "서브 프로세스"를 사용하려고했다Python 스크립트

:

subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=None, stderr=None, executable="/bin/bash") 

그러나이 명령은 쉘에있는 모든 프로세스를 보여줍니다, 나는 그것을 숨길 수 없습니다.

도움 주셔서 감사합니다. 는/dev/null로 출력을 리디렉션 할

+0

제대로 분기되지 않는 것 같습니다. 설명서를 읽으려고 했습니까? – bvd

+0

Python 3.5+의 경우 ['subprocess.run()'] (https://docs.python.org/3/library/subprocess.html#subprocess.run)을 참조하십시오. – phoenix

답변

10

subprocess 라이브러리의 check_call을 사용할 수 있습니다.

from subprocess import STDOUT, check_call 
import os 
check_call(['apt-get', 'install', '-y', 'filetoinstall'], 
    stdout=open(os.devnull,'wb'), stderr=STDOUT) 

이 경우에는 stdout os.devnull /dev/null하거나 덤프.

os.devnull는 플랫폼 독립적 인, 그리고,이 특정 작업을 위해

+0

러셀 감사합니다! –

+0

@Cirux - 대단히 환영합니다. –

+0

감사합니다! 각 솔루션의 일부를 사용합니다. 내 코드 : proc = subprocess.Popen ('apt-get install -y FILE', shell = True, stdin = 없음, stdout = 열기 (os.devnull, "wb"), stderr = STDOUT, executable = "/bin/bash ") proc.wait() 추가 : stdout 및. 당신이 공유 한 링크이 있습니다 당신에게 한 번 더 –

0

사용이 : 모두 apt-get이 완료 될 때까지

proc = subprocess.Popen('apt-get install -y filetoinstall', shell=True, stdin=None, stdout=open("/dev/null", "w"), stderr=None, executable="/bin/bash") 
proc.wait() 

통화가 (.wait하기가) 차단합니다.

+0

감사합니다.하지만 어떻게 프로그램을 중지 할 수 있습니까? apt는 설치 완료를 기다리고, 다른 기능은 언제 설치됩니까? –

+0

답안을 업데이트했습니다. –

+0

안녕하세요, 남자, 대단히 감사합니다 아르헨티나에서! –

3

을 (여전히 좋은 :) 알고, apt-get를 사용하지만하고 있기 때문에 관련하지 않은) Windows에서 POSIX와 nul/dev/null를 반환합니다 subprocess 대신 파이썬 배포 도구 Fabric을 사용하여 빌드를 자동화 할 수 있습니다.

+0

감사 기다립니다 이 페이지를 볼 수있는 적절한 권한이없는 권한 거부. 허가를 요청하려면이 프로젝트 소유자에게 문의하십시오. – Ayush

+0

@Ayush : 링크 업데이트 –

+0

대단히 감사합니다. – Ayush

2

고마워요! 각 솔루션의 일부를 사용합니다. 내 코드 :

proc = subprocess.Popen('apt-get install -y FILE', shell=True, stdin=None, stdout=open(os.devnull,"wb"), stderr=STDOUT, executable="/bin/bash") 
proc.wait() 

추가 : 표준 출력 및

아르헨티나에서 당신에게 한 번 더 감사

을 .wait!