programing

파이썬에서 가져온 모듈의 main()을 호출할 수 있습니까?

cafebook 2023. 8. 6. 10:20
반응형

파이썬에서 가져온 모듈의 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_argsargparse.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

반응형