调用一个Python脚本来执行另一个Python脚本,并等待其执行完成。

3

让我用一个例子来解释我的问题:

我有一个名为 script1.py 的文件,内容如下:

script1.py

for (i in range(0,10))
    generate script2.py
    execute(script3.py)

script3.py导入了script2.py

我的需求是生成10个不同的script2.py,然后执行script3.pyscript3.py会生成一个文件夹,并将所有文件从三个脚本所在的相同文件夹复制到不同的位置。 script2.py中定义了一些参数,这些参数由script3.py用于生成文件夹名称,然后将所有文件复制到该文件夹。

我尝试过使用os.system()subprocess.callwaitsubprocess.Popen与通信,但我无法正确地执行它。

发生的情况是,即使迭代计数为10,也不会生成10个文件夹。 虽然在script2.py中更改了参数,但script3.py仍然使用旧参数来生成文件夹名称。

我正在使用Python 3.3在Windows机器上执行此操作。

有可能解决方案或我可能犯的任何错误,请指教?


1
你说“这应该创建比它现在更多的文件夹”,但你没有展示任何创建文件夹的代码。我们不是通灵者。鉴于这个有限的信息,我们只能说:你的代码中存在错误。 - Aran-Fey
抱歉问题不太明确,我已经更新了问题。希望现在更清楚了。谢谢。 - Ronak
1个回答

8

使用subprocess模块。下面是一个示例。

import subprocess

for i in range(10):
    generate script2.py

    cmd = ['python', 'script3.py']
    subprocess.Popen(cmd).wait()

    # Python will now wait for script3 to return
    # before going on to the next iteration

这里有有用的文档资料


在Windows上,我想我需要添加“python”命令。 - Ronak
在Windows上,我想我必须在命令中添加“python”。 我尝试了这个,但是它生成的文件夹数量比应该少。我不确定为什么等待命令不能正常工作。 - Ronak
1
如果在要求生成10个文件夹时只生成了7个,试着请求生成15个,这样可能会生成10个 :) - Jivan
刚看到你在回答中的编辑。 我没有执行脚本2和脚本3。我在script1.py中生成了一个名为“script2.py”的文件,然后仅执行script3.py,它导入script2.py。 - Ronak
哈哈,不幸的是这不是一个选项...因为我需要精确地生成10个script2.py文件和每个文件对应的10个文件夹。 :P - Ronak
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接