在没有子进程的情况下从 python 调用 python argparse 接口

问题描述 投票:0回答:1

考虑 以下玩具 python 应用程序,它只有 argparse CLI argparse 接口。

import argparse

def main():
    parser = argparse.ArgumentParser(description="Printer")
    parser.add_argument("message")
    args = parser.parse_args()
    print(args.message)

if __name__ == "__main__":
    main()

我想使用它来自另一个python脚本,

  • 无需重构玩具示例(因为它可能很费力,或者可能我没有修改它的权限)
  • 不调用 python
    Subprocess
    (因为它破坏了调用堆栈,有时会破坏 pycharm 调试器,并且通常使调试更难)。

有什么办法可以做到这一点?

python command-line-interface argparse
1个回答
0
投票

您可以操纵

sys.argv
列表来获得您想要的行为。

import argparse

def main():
    parser = argparse.ArgumentParser(description="Printer")
    parser.add_argument("message")
    args = parser.parse_args()
    print(args.message)

if __name__ == "__main__":
    import sys
    sys.argv = [sys.argv[0]]  # remove original arguments except the path
    sys.argv.append('hello')
    main()
hello

确保将

sys.argv.copy()
保存在某个地方,以便在您的功能完成后将其重置。

© www.soinside.com 2019 - 2024. All rights reserved.