当我使用os.system()在Python中打开.py文件时,它会立即自动关闭它。我该如何解决?

时间:2012-07-26 23:35:07

标签: python os.system

我正在编写一个需要打开另一个脚本的脚本,但是继续运行主脚本,以便两个脚本同时运行。

我已尝试过execfile(),但该文件无法打开。当我使用os.system(somefile.py)时,它通过控制台成功打开.py文件但立即关闭它。是否有替代方案,以便我可以在主python脚本中运行python脚本,但是两个进程同时运行而不会相互冲突?

以下是我测试的示例代码:

import os
file_path = 'C:\\Users\\Tyler\\Documents\\Multitask Bot\\somefile.py'

def main():
    os.system(file_path)

if __name__ == '__main__':
    main()

3 个答案:

答案 0 :(得分:3)

execfile()os.system()将阻止父进程,直到子进程退出。使用subprocess.Popen(),例如

import subprocess, time
file_path = 'C:\\Users\\Tyler\\Documents\\Multitask Bot\\somefile.py'

def main():
    child = subprocess.Popen(['python', file_path])
    while child.poll() is None:
        print "parent: child (pid = %d) is still running" % child.pid
        # do parent stuff
        time.sleep(1)
    print "parent: child has terminated, returncode = %d" % child.returncode

if __name__ == '__main__':
    main()

这只是处理它的一种方法。您可能希望从子级收集stdout和/或stderr,并可能将数据发送到子级的stdin。阅读子过程模块。

答案 1 :(得分:2)

如果要同时运行其他脚本,请考虑subprocess模块。

答案 2 :(得分:0)

您的问题可能是该文件未在C:\\Users\\Tyler\\Documents\\Multitask Bot\\中执行 但在其他地方。本地导入可能会失败。

您可以尝试在os.chdir('C:\\Users\\Tyler\\Documents\\Multitask Bot\\')之前执行os.system吗?