【问题标题】:Calling python script with arguments from a wrapper script使用包装脚本中的参数调用 python 脚本
【发布时间】:2018-07-17 14:41:12
【问题描述】:

我要做的是创建一个包装脚本,比如说program1.py,它从main() 调用program2.pyprogram3.pyprogram1.pyprogram2.pyprogram3.py 都需要有自己的参数。创建此包装脚本的最佳方法是什么?在program1.py的main方法运行program2.py脚本之前是否应该提示用户?

【问题讨论】:

  • 理想情况下,您的包装脚本会处理所有事情并收集子程序所需的所有参数
  • 如果您想将相同的参数传递给“包装”脚本,请在调用program2.pyprogram3.py 时将sys.argv[1:] 转发到subprocess.Popen()(或其他subprocess 函数)。也就是说,如果你想将它们作为子进程运行,你可以只导入它们并让它们共享当前的 sys 上下文。

标签: python python-3.x python-2.7 shell


【解决方案1】:

向 Subprocess 传递参数时,您需要传递一个列表,其中包含您要执行的命令中的每个单词,例如

subprocess.Popen(['python', 'program2.py', argv[1], argv[2]])

将使用包装进程的参数 argv[1] 和 argv[2] 执行程序 2。

如果argv[1] = 'hello'argv[2] = 'world'

python program2.py hello world

将被执行。

【讨论】:

  • 如果我想将 --drop "collection_name" 之类的东西作为 program2.py 的参数怎么办?我是否需要使用 argparse.ArgumentParser,添加参数,并在包装​​脚本中使用 if args.collection_name == "example_collection" 并将其传递给第二个脚本?
  • 虽然您不必使用 argparse,但您可以只使用 argv 收集参数,在处理更复杂的参数模式时,它会让您的生活更轻松。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 2012-10-02
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多