두 개의 스크립트가 있습니다. 메인은 파이썬 3에서, 두 번째는 파이썬 2로 작성되었습니다 (파이썬 2 라이브러리를 사용합니다).파이썬 3에서 파이썬 2 스크립트 호출하기
Python 3 스크립트에서 호출하고 싶은 Python 2 스크립트에는 한 가지 방법이 있지만이 브리지를 교차하는 방법을 모르겠습니다.
두 개의 스크립트가 있습니다. 메인은 파이썬 3에서, 두 번째는 파이썬 2로 작성되었습니다 (파이썬 2 라이브러리를 사용합니다).파이썬 3에서 파이썬 2 스크립트 호출하기
Python 3 스크립트에서 호출하고 싶은 Python 2 스크립트에는 한 가지 방법이 있지만이 브리지를 교차하는 방법을 모르겠습니다.
당신은 일을 서브 프로세스 (파이썬 모듈)을 사용하여 bash가 python2를 실행할 수 다음
3 파이썬 에서 :
#!/usr/bin/env python3
import subprocess
python3_command = "py2file.py arg1 arg2" # launch your python2 script using bash
process = subprocess.Popen(python3_command.split(), stdout=subprocess.PIPE)
output, error = process.communicate() # receive output from the python2 script
어디 다른 호출
내 문제를 해결 한 훌륭한 답변, 감사합니다! – frakman1
다음 파이썬 라인을 실행하기 전에 서브 프로세스가 끝날 때까지 기다리려면'subprocess.call' 사용을 고려하십시오 https://stackoverflow.com/a/89243/3822261 –
이것이 어떻게 대답인지 이해할 수 없습니다. 파이썬 3 인터프리터를 사용합니다. –
을 반환 어떤 파이썬이 출력 저장 서로의 파이썬 버전은 'execnet'을 사용하여 매우 우아하게 처리 할 수 있습니다. 그런 다음
def my_function(X, Y):
return "Hello %s %s!" % (X, Y)
다음과 같은 기능을
result = call_python_version("2.7", "my_module", "my_function",
["Mr", "Bear"])
print(result)
result = call_python_version("2.7", "my_module", "my_function",
["Mrs", "Wolf"])
print(result)
결과
에Hello Mr Bear!
Hello Mrs Wolf!
를 호출
import execnet
def call_python_version(Version, Module, Function, ArgumentList):
gw = execnet.makegateway("popen//python=python%s" % Version)
channel = gw.remote_exec("""
from %s import %s as the_function
channel.send(the_function(*channel.receive()))
""" % (Module, Function))
channel.send(ArgumentList)
return channel.receive()
예 : 파이썬 2.7로 작성된 my_module.py
다음 함수는 매력을 수행
무슨 일이 일어 났습니까? channel.receive()
과 함께 인수 목록에 대해 을 대기하는 '게이트웨이'가 인스턴스화되었다는 것입니다. 일단 그것이 들어 오면 그것은 번역되어 my_function
에게 건네졌습니다. my_function
은 생성 된 문자열을 반환하고 channel.send(...)
은 문자열을 되돌려 보냈습니다. 게이트웨이의 다른 쪽에서는 channel.receive()
이 결과를 포착하여 호출자에게 리턴합니다. 호출자는 결국 my_function
에 의해 생성 된 문자열을 파이썬 3 모듈에 인쇄합니다.
python 3으로 파이썬 코드를 실행하고 있지만 python 2.7로 작성된 도구 (ocropus)가 필요합니다. 나는 오랫동안이 모든 옵션을 서브 프로세스로 시험해 보았고 오류가 계속 있었으며 스크립트는 완료되지 않았습니다. 커맨드 라인에서, 그것은 잘 실행됩니다. 그래서 마침내 효과가있는 간단한 것을 시도했지만 온라인 검색에서 찾지 못했습니다. ocropus 명령을 bash 스크립트에 넣습니다.
#!/bin/bash
/usr/local/bin/ocropus-gpageseg $1
하위 프로세스로 bash 스크립트를 호출합니다.
command = [ocropus_gpageseg_path, current_path]
process = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output, error = process.communicate()
print('output',output,'error',error)
이것은 실제로 ocropus 스크립트가 필요로하는 자체 세계를 제공합니다. 나는 누군가 다른 사람을 구할 것이라는 희망으로 이것을 게시하고 있습니다.
셸 명령으로 보안 위험이 발생할 수 있습니다. 그것은 권장되지 않습니다. – user2564259
참고 : liclipse IDE에서 Python 2.x/w를 실행할 때 이런 현상이 발생했습니다. 명령 줄에서 bash 스크립트를 실행했을 때 문제가 발생하지 않았습니다. 여기에 파이썬 2.x & 3.x 스크립트를 혼합했을 때 내가 가진 & 솔루션의 문제점이 있습니다.
나는 python 3.6 스크립트를 호출/실행하는 데 필요한 & 파이썬 2.6 프로세스를 실행 중입니다. 환경 변수 PYTHONPATH가 2를 가리 키도록 설정되었습니다.6 파이썬 S/W, 그래서 그것은 followng 질식했다 : 012 파이썬 스크립트가 실패하게되었습니다. 그래서 3.6 프로그램을 직접 호출하는 대신 PYTHONPATH 환경 변수를 nuked하는 bash 스크립트를 만들었습니다.
#!/bin/bash
export PYTHONPATH=
## Now call the 3.6 python scrtipt
./36psrc/rpiapi/RPiAPI.py $1
특정 방법은 파이썬 2 특정 기능에 의존합니까? 파이썬 3으로 변환 될 수 있습니까? – jonrsharpe
파이썬 2 전용 라이브러리 (Obspy, 현재 3.x에서는 지원되지 않음)를 사용하고 있습니다. –
3x에서 지원되지 않으면 간단히 실행할 수 없습니다. –