有两个 python 脚本,“script1.py”和“script2.py”。
'script1.py' 使用 OptionParser 来解析命令行参数。
'script1.py' 的内容看起来像这样
from optparse import OptionParser
def main():
parser = OptionParser()
parser.add_option("-o", "--option1")
parser.add_option("-p", "--option2")
(opts, args) = parser.parse_args()
# Do things with the options
if __name__ == '__main__':
main()
在命令行上运行它。它运行:
python script1.py -o Option1 -p Option2
'script2.py' 也使用以相同方式实现的 OptionParser,但具有一组不同的选项。
“script2.py”也将“script1.py”作为模块导入。
我想从 script2.py 运行 script1.py 的主要部分。做这个的最好方式是什么?
我让它工作的一种方法是更改 script1.py 的 main 以将 OptionParser 作为参数。
def main(OptionParser):
...
...
...
if __name__ == '__main__':
main(OptionParser)
并确保两个脚本的 OptionParser 具有完全相同的选项。如果我这样做,那么我可以将 OptionParser 对象从 script2 传递到 script1,如下所示:
script1.main(OptionParser)
有没有办法在不使两个脚本中的 OptionParser 相同的情况下实现相同的结果。
理想情况下,我希望它按以下方式工作:
script1.main(option1="Option1", option2="Option2")
这样我可以从命令行以及另一个脚本运行 script1。
编辑:我也知道我可以使用 subprocess 和 os.system() 来执行 python 脚本。我想知道是否有更简洁的方法来设计两个脚本之间的交互。
编辑 2:根据 Mig 的建议,我将选项解析器移出 main。
scrip1.py 现在看起来如下
def main(option1, option2):
# Do main things
if __name__ == '__main__':
parser = OptionParser()
parser.add_option("-o", "--option1")
parser.add_option("-p", "--option2")
(opts, args) = parser.parse_args()
main(option1=opts.option1, option2=opts.option2)
现在从 script2.py 导入 script1.py 作为模块后,我可以调用 main of script1 script1.main(option1="Option1", option2="Option2")
。