파이썬에서 가져온 모듈의 main()을 호출할 수 있습니까?
Python에는 몇 가지 함수를 정의하는 모듈 myModule.py 과 몇 가지 명령줄 인수를 사용하는 메인 모듈이 있습니다.
저는 보통 이것을 bash 스크립트에서 main()이라고 부릅니다.이제 저는 모든 것을 작은 패키지에 넣고 싶습니다. 그래서 저는 제 간단한 bash 스크립트를 파이썬 스크립트로 만들어서 패키지에 넣을 수 있을 것이라고 생각했습니다.
그렇다면 MyFormerBashScript.py 의 메인 기능에서 myModule.py 의 메인 기능을 실제로 어떻게 부를 수 있을까요?해도 돼요?어떻게 주장을 전달합니까?
그냥 기능일 뿐입니다.가져오기 및 호출:
import myModule
myModule.main()
인수를 구문 분석해야 하는 경우 두 가지 옵션이 있습니다.
구문 분석
main()
그냥 넘어가세요sys.argv
파라미터로(같은 모듈의 아래 모든 코드)myModule
):def main(args): # parse arguments using optparse or argparse or what have you if __name__ == '__main__': import sys main(sys.argv[1:])
이제 가져오기 및 호출할 수 있습니다.
myModule.main(['arg1', 'arg2', 'arg3'])
다른 모듈에서.갖고 있다
main()
이미 구문 분석된 매개 변수를 수락합니다(다시 모든 코드).myModule
모듈):def main(foo, bar, baz='spam'): # run with already parsed arguments if __name__ == '__main__': import sys # parse sys.argv[1:] using optparse or argparse or what have you main(foovalue, barvalue, **dictofoptions)
가져오기 및 호출
myModule.main(foovalue, barvalue, baz='ham')
다른 곳에서 필요에 따라 파이썬 인수를 전달합니다.
여기서 트릭은 모듈이 스크립트로 사용되고 있을 때 감지하는 것입니다. 파이썬 파일을 주 스크립트로 실행할 때 (python filename.py
) 아니요import
문이 사용되고 있으므로 파이썬은 해당 모듈을 호출합니다."__main__"
하지만 그것이 같다면,filename.py
코드는 모듈로 처리됩니다(import filename
), 그런 다음 python은 대신 모듈 이름으로 사용합니다.두 경우 모두 변수__name__
설정되어 있으며, 이에 대한 테스트를 통해 코드가 어떻게 실행되었는지 알 수 있습니다.
마르티엔의 대답은 일리가 있지만, 그것은 다른 사람들에게는 분명해 보일 수 있지만 제가 이해하기 어려운 중요한 것을 놓치고 있었습니다.
Argparse를 사용하는 버전에서는 본문에 이 줄이 있어야 합니다.
args = parser.parse_args(args)
일반적으로 스크립트에서 Argparse를 사용할 때는 그냥 씁니다.
args = parser.parse_args()
그리고 parse_args는 명령줄에서 인수를 찾습니다.그러나 이 경우 주 함수는 명령줄 인수에 액세스할 수 없으므로 인수가 무엇인지 Argparse에 말해야 합니다.
여기 예가 있습니다.
import argparse
import sys
def x(x_center, y_center):
print "X center:", x_center
print "Y center:", y_center
def main(args):
parser = argparse.ArgumentParser(description="Do something.")
parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False)
parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False)
args = parser.parse_args(args)
x(args.xcenter, args.ycenter)
if __name__ == '__main__':
main(sys.argv[1:])
이 이름을 mytest.py 로 지정했다고 가정하고 실행하려면 명령줄에서 다음 중 하나를 수행할 수 있습니다.
python ./mytest.py -x 8
python ./mytest.py -x 8 -y 2
python ./mytest.py
각각 돌아오는 것.
X center: 8.0
Y center: 4
또는
X center: 8.0
Y center: 2.0
또는
X center: 2
Y center: 4
또는 다른 파이썬 스크립트에서 실행하려는 경우 실행할 수 있습니다.
import mytest
mytest.main(["-x","7","-y","6"])
어느 쪽이 돌아옵니까?
X center: 7.0
Y center: 6.0
사정에 따라 다르겠지.가 메인코다의경보로 if
다음과 같이:
if __name__ == '__main__':
...main code...
아니요, 이변때영 파이썬그에 영향을 줄 수 없기 때문에 이 실행되도록 할 수 없습니다.__name__
.
하지만 모든 코드가 함수 안에 있을 때는 그럴 수도 있습니다.
import myModule
myModule.main()
이 이기은모모자보작경다동으로 합니다.__all__
.
from myModule import *
될 요.main
모듈 자체를 가져와야 합니다.
제가 찾던 답은 여기에 답이 있었습니다.sys.argv 이외의 인수와 함께 python argparse를 사용하는 방법은 무엇입니까?
한다면main.py
그리고.parse_args()
글을 될 수 있어요.
# main.py
import argparse
def parse_args():
parser = argparse.ArgumentParser(description="")
parser.add_argument('--input', default='my_input.txt')
return parser
def main(args):
print(args.input)
if __name__ == "__main__":
parser = parse_args()
args = parser.parse_args()
main(args)
그럼 전화하셔도 됩니다.main()
인수를 를사하 구문분석으로 합니다.parser.parse_args(['--input', 'foobar.txt'])
다른 파이썬 스크립트로:
# temp.py
from main import main, parse_args
parser = parse_args()
args = parser.parse_args([]) # note the square bracket
# to overwrite default, use parser.parse_args(['--input', 'foobar.txt'])
print(args) # Namespace(input='my_input.txt')
main(args)
저도 같은 필요성이 있었습니다.argparse
역시제. 문는. ▁too는.parse_args
의 argparse.ArgumentParser
으로 " 개인기에로으해서인암가져다로니옵으시적를수체당는스스"에서 해당 인수를 .sys.args
라인에 진행되는명시적으로 으로 구성되어 Martjn , 신이전인변수있다니습할를경수한달으어을성되로에 전달하는 인수를 할 수 .parse_args
대로
def main(args):
# some stuff
parser = argparse.ArgumentParser()
# some other stuff
parsed_args = parser.parse_args(args)
# more stuff with the args
if __name__ == '__main__':
import sys
main(sys.argv[1:])
핵심은 인수를 전달하는 것입니다.parse_args
이 시키는대로 .나중에 메인을 사용하려면 마틴이 시키는 대로 하면 됩니다.
명령줄 인수도 전달하려고 한다고 가정합니다.
import sys
import myModule
def main():
# this will just pass all of the system arguments as is
myModule.main(*sys.argv)
# all the argv but the script name
myModule.main(*sys.argv[1:])
는 이 수 .Main()
방법은 다음과 같은 클릭 옵션으로 장식되었기 때문입니다.
# @click.command()
# @click.option('--username', '-u', help="Username to use for authentication.")
이러한 장식/속성을 제거하면 다른 파일에서 Main() 메서드를 성공적으로 호출할 수 있습니다.
from PyFileNameInSameDirectory import main as task
task()
언급URL : https://stackoverflow.com/questions/14500183/in-python-can-i-call-the-main-of-an-imported-module
'programing' 카테고리의 다른 글
쿠버네티스는 실제로 무엇을 합니까? (0) | 2023.08.06 |
---|---|
nodejs에 대한 좋은 메시지 대기열 옵션은 무엇입니까? (0) | 2023.08.06 |
마크다운 텍스트와 재구성된 텍스트 모두에서 동일한 README 사용 (0) | 2023.08.06 |
MySQL에서 50K+ 레코드 가져오기에 일반 오류 발생: 1390 준비됨 문에 자리 표시자가 너무 많습니다. (0) | 2023.08.06 |
유니코드 문자를 CSS 콘텐츠 값에 배치 (0) | 2023.08.06 |