我在IDE中分别运行了一些.py程序(我猜它们只是作为单独的进程运行,对吧)。他们每个人都有几个类,一些全局变量等和主要功能。如何以编程方式实现相同的效果,即按特定顺序运行这些脚本?
我尝试了几种方法,但它们似乎没有产生与手动启动这些脚本相同的效果。
答案 0 :(得分:0)
您是否曾尝试编写其他脚本,从这些单独的程序中导入所需的内容并以您指定的方式运行它们?
答案 1 :(得分:0)
您可以制作第三个脚本,其中包含您希望运行的所有其他脚本的名称,然后对subprocess
进行python
命令调用
详细了解子流程here
答案 2 :(得分:0)
一般来说,导入脚本会运行脚本。如果我有一个名为spam.py
的脚本,其内容为:
print 'eggs'
然后我可以使用以下内容在同一目录中编写另一个脚本run.py
:
import spam
当我运行python run.py
时,它会输出'eggs'。
用作导入的库模块的大多数脚本只包含函数和类定义。导入它们时仍会运行这些模块,但除了进行定义之外,它们实际上并不执行任何操作。
因此,如果我将spam.py
更改为:
def main():
print 'eggs'
然后当我跑python run.py
时,实际上什么都不会发生。但我可以将run.py
改为:
import spam
spam.main()
现在它将在命名空间main
中定义spam
,并通过调用main()
打印'eggs'。
最后,有时脚本既可以用作要导入的模块,也可以用作自己运行的脚本。为此,通常情况下,导入时除了定义模块和类之外,您不希望脚本执行任何操作。您可以按照以下方式使spam.py
工作:
def main():
print 'eggs'
if __name__ == '__main__':
main()
现在,如果您运行python spam.py
,它会将'鸡蛋'打印到屏幕上。但如果你import spam
它不会。 if __name__ == '__main__':
中的语句套件仅在您直接调用脚本时运行。
但是,通过导入spam
并调用python spam.py
,您仍然可以从spam
获得与main
相同的行为:
import spam
spam.main()
再一次,这会将鸡蛋打印到屏幕上。
因此,如果您要从其他脚本按顺序运行许多脚本foo.py
,bar.py
,baz.py
,则只需导入所有脚本,然后再导入命令受if __name__ == '__main__':
保护,您在调用脚本中运行它们,确保为每个命令添加适当的命名空间(即如果在main()
中调用foo.py
,则调用{{1} }})。