import os
import sys
try:
from shutil import which
except ImportError:
from distutils.spawn import find_executable as which
bindir = os.path.dirname(which('esptool.py'))
sys.path.append(bindir) # after this line, esptool becomes importable
import esptool
if __name__ == '__main__':
esptool.main()
import importlib.machinery
import importlib.util
from shutil import which
if __name__ == '__main__':
loader = importlib.machinery.SourceFileLoader('esptool', which('esptool.py'))
spec = importlib.util.spec_from_loader(loader.name, loader)
esptool = importlib.util.module_from_spec(spec)
loader.exec_module(esptool) # after this line, esptool is imported
esptool.main()
Python 2.7
import imp
from distutils.spawn import find_executable as which
if __name__ == '__main__':
esptool = imp.load_source('esptool', which('esptool.py'))
esptool.main()
传递命令行参数
命令行参数存储在sys.argv列表中,因此您必须临时覆盖它才能将参数传递给main函数:
# assuming esptool is imported
import sys
if __name__ == '__main__':
# save the current arguments
argv_original = sys.argv[:]
# overwrite arguments to be passed to esptool argparser
sys.argv[:] = ['', '-p', '/dev/ttyUSB0', 'write_flash', '-fm', 'qio', '0x0000']
try:
esptool.main()
except Exception:
# TODO deal with errors here
pass
finally: # restore original arguments
sys.argv[:] = argv_original
解决导入问题
不能简单地调用
import esptool
,因为esptool.py
是一个可执行脚本,因此不能像普通模块那样导入。但是,从可执行脚本导入代码有一些变通方法;我知道有两种方法:扩展
sys.path
您可以扩展
sys.path
以包含包含esptool.py
脚本的bindir。从命令行进行简单检查:应该给你打印用法帮助文本。你知道吗
在代码中扩展
sys.path
:使用进口机械
通过使用从任意文件导入Python代码的机制,可以避免扩展
sys.path
。我更喜欢这个解决方案而不是摆弄sys.path
,但不幸的是,它在python2和python3之间是不可移植的。你知道吗Python 3.5+
Python 2.7
传递命令行参数
命令行参数存储在
sys.argv
列表中,因此您必须临时覆盖它才能将参数传递给main函数:相关问题 更多 >
编程相关推荐