2016-09-26 4 views
0

virutalenv를 만들고 설치했습니다. 내 virutal 환경 안에 jsnapy 도구도 설치했습니다.Python을 사용하여 가상 환경에서 명령을 실행하는 방법

우리는 알 필요가
Filename : venv.py 
import os 
os.system('/bin/bash --rcfile ~/TestAutomation/End2EndAutomation/bin/activate') 
os.system('End2EndAutomation/bin/jsnapy') 

[email protected]:~/TestAutomation$ python venv.py 
(End2EndAutomation) [email protected]:~/TestAutomation$ ^C 

, 우리는 virutalenv에 들어가 명령을 실행하고 파이썬 스크립트를 사용하여 비활성화 할 수 있습니다 방법입니다

이것은 우리가 사용하고있는 스크립트입니다?

[EDIT1]

나는 메모에 주어진 코드를 사용했다. 그 단지 virutal 한 env에 들어가는 것. exit를 실행하면 jsnapy 명령이 실행됩니다.

[email protected]:~/TestAutomation$ python venv.py 
(End2EndAutomation) [email protected]:~/TestAutomation$ exit 
exit 
usage: 
This tool enables you to capture and audit runtime environment of 
networked devices running the Junos operating system (Junos OS) 

Tool to capture snapshots and compare them 
It supports four subcommands: 
--snap, --check, --snapcheck, --diff 
1. Take snapshot: 
     jsnapy --snap pre_snapfile -f main_configfil 

답변

0

os.system()를 호출 할 때마다 새로운 bash는 인스턴스를 생성하고 이전을 종료합니다. 단일 bash는 스크립트 내에서 모든 명령을 넣어 부를 수있는 하나 개의 bash는 인스턴스의 모든 명령을 실행하려면 그 파이썬

source ~/TestAutomation/End2EndAutomation/bin/activate 
End2EndAutomation/bin/jsnapy 
deactivate 

run.sh

os.system()에서

os.system('source run.sh') 

또는 하나의 os.system() 호출이있는 한 여러 줄 배시 명령을 쓸 수도 있습니다.

+0

가상 환경에서 나가기 전까지 jnapy를 호출하지 않습니다. 오히려 시스템 호출을하는 효율적인 방법이 있습니까? – srinath

+0

질문에 대한 자세한 정보를 추가해야합니다. – Soviut

0

두 번의 연속적인 호출 os.system()은 두 개의 독립적 인 프로세스를 차례로 생성합니다. 첫 번째 작업이 완료되면 두 번째 작업이 실행됩니다. 첫 번째 프로세스에서 실행 된 명령의 모든 효과는 두 번째 실행시 잊어 버리고 플러시됩니다.

동일한 프로세스 (즉, 동일한 단일 쉘 인스턴스)에서 virtualenv에서 실행해야하는 활성화 및 명령을 실행하려고합니다.

이렇게하려면 bash -c '...'을 사용하여 일련의 명령을 실행할 수 있습니다. 아래를 참조하십시오.

그러나 더 나은 해결책은 단순히 파이썬 자체 내에서 가상 환경을 활성화하는 것입니다.

p = os.path.expanduser('~/TestAutomation/End2EndAutomation/bin/activate_this.py') 
execfile(p, dict(__file__=p)) 
subprocess.check_call(['./End2EndAutomation/bin/jsnapy']) 

완벽을 기하기 위해 여기에 의견이있는 Bash 솔루션이 있습니다.

import subprocess 
subprocess.check_call(['bash', '-c', """ 
    . ~/TestAutomation/End2EndAutomation/bin/activate 
    ./End2EndAutomation/bin/jsnapy"""]) 

os.system 이상 subprocess에 대한 선호는 심지어 os.system documentation에 좋습니다.

명시 적으로 deactivate을 필요가 없습니다. bash 명령이 완료되면 암시 적으로 가상 환경도 비활성화됩니다.

--rcfile 트릭은 좋은 생각이지만, 호출하는 쉘이 대화 형이 아닌 경우에는 작동하지 않습니다.

관련 문제