300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python中的main函数可以被其他文件调用么_在Python中 如何在另一个py文件的[if\u n

python中的main函数可以被其他文件调用么_在Python中 如何在另一个py文件的[if\u n

时间:2023-10-14 02:04:48

相关推荐

python中的main函数可以被其他文件调用么_在Python中 如何在另一个py文件的[if\u n

你不能“调用它的主函数”,因为它没有主函数。

事实上,通常的处理方法是将所有这些代码移到一个函数中,然后使

__main__

警戒代码就是这么叫的:

def main(args):

for key in args:

print(key)

if __name__ == '__main__':

main(sys.argv)

那么你

可以

调用它的主函数,向它传递任何需要的参数。

但如果你不能修复文件,那就行不通了。

那么,什么

可以

你呢?这完全取决于你到底需要如何遵循惯例

python another.py

语义学。

快速肮脏的方法是

blhsing's answer

建议:阅读文件,然后

exec

它和

globals

从你自己的剧本:

with open('another.py') as f:

exec(f.read(), globals())

注意,这将离开

sys.argv

原封不动。当然,您可以先手动将其设置为其他值:

_argv = sys.argv

sys.argv = ['args', 'i', 'want', 'it', 'to', 'see']

try:

with open('another.py') as f:

exec(f.read(), globals())

finally:

sys.argv = _argv

如果您是从另一个模块(而不是从顶级脚本)执行此操作,则此操作将不起作用,但稍作修改后,它将:

with open('another.py') as f:

exec(f.read(), sys.modules['__main__'].__dict__)

但是最好创建一个干净的全局命名空间。脚本可能不希望你的globals坐在周围,它可能会改变你不希望它改变的事情。这同样简单:

with open('another.py') as f:

exec(f.read(), {})

(注意,这仍然会自动继承当前的

builtins

,这是你通常想要的。如果你

不要

想知道为什么,看

执行官

文档。)

如果要保证执行它的方式与正常运行脚本的方式完全相同,请使用

runpy

模块。

当你跑的时候

python -m another

,它最终要做的是:

runpy.run_module(sys.argv[0], run_name="__main__", alter_sys=True)

因此,您可以手动执行相同的操作:

runpy.run_module('another', run_name='__main__')

是否要添加

alter_sys=True

取决于你在追求什么。如果脚本试图访问

系统参数

(就像你的剧本一样)或者

sys.modules['__main__']

,它将看到你的价值观,而不是自己的价值观。

如果你想效仿

python另一个.py

,您需要使用

importlib

创建完整的

__spec__

以及相关对象,然后调用

runpy.run_path

.

python中的main函数可以被其他文件调用么_在Python中 如何在另一个py文件的[if\u name\uuuu=\uu main\uu]中调用子例程?...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。