【问题标题】:How would I loop a python file to open another python file indefinitely?我将如何循环一个 python 文件以无限期地打开另一个 python 文件?
【发布时间】:2020-04-23 00:09:59
【问题描述】:

所以我知道如何在另一个 Python 文件 exec(open('file.py').read()) 中执行 Python 文件,但是我要循环的文件在文件中有一个 while(True): 循环。我想要做的是循环打开包含 while true 循环的文件,同时让该文件在后台运行。

开场密码:

loopCount=1
maxCount=100
while(loopcount<=maxCount):
     exec(open('whileTrue.py').read())

我认为你会做这样的事情,但不是打开文件,而是让文件在后台运行,然后再次打开文件等;代码打开文件一次,然后在文件关闭之前运行文件而不打开下一个文件。

非常感谢任何帮助。

【问题讨论】:

  • 如果我理解你的问题,我认为你不能做你喜欢做的事,或者至少这不是一个好主意。您可以尝试在 python cde 中读取并对其进行解析以识别 while 循环并添加代码以打破它,但我认为您不应该这样做。也许您可以尝试真正解释您尝试实现的目标,也许使用exec(open().read()) 可以使用不同的解决方案,但实际上并不是执行另一个python 文件的标准方式。 (import / reload / multiprocessing / subprocess.Popen 或者更常用的方式

标签: python python-3.x exec


【解决方案1】:

首先,exec(...) 命令是不安全的,确实应该避免。另一种方法是导入您的其他 Python 文件,就好像它是一个模块一样。

为了能够多次并行运行第二个文件,您可以使用 Python 内置的 threading 模块。

假设我们有两个文件,FileA.pyFileB.py

FileA.py:

import threading, FileB
for i in range(5):
    currentThread = threading.Thread(target=FileB.Begin)
    currentThread.start()

FileB.py:

import time
def Begin():
    for i in range(10):
        print("Currently on the {} second...".format(i))
        time.sleep(1)

FileA.py 将启动 5 个不同的线程,每个线程运行来自 FileB.pyBegin() 函数。您可以替换 Begin() 函数的内容、重命名或做任何您喜欢的事情,但请务必更新 FileA.py 中的线程 target

应该注意,打开太多线程是个坏主意,因为您可能会超过计算机的内存量。除此之外,您应该确保您的线程最终结束并且不是真正的“无限循环”,因为您可能会发现您必须强制关闭您的 FileA.py 版本才能结束线程。

有关线程模块的更多详细信息,您可以查看 python 文档:https://docs.python.org/3/library/threading.html

或者您可以通过在 Google 上搜索 Python threading 来获得许多与该主题相关的指南。

我希望这会有所帮助。

【讨论】:

  • 为什么exec() 不安全?
  • 执行代码的方法几乎总是比使用exec() 更清晰,因此通常认为使用这些更清晰的方法更好。除此之外,在传递给exec() 的复杂命令中定位错误可能很困难。如果没有正确过滤,exec() 命令还会打开代码注入窗口,因此最好使用替代方法来完成您的任务。可以在这里找到一个简短的答案:stackoverflow.com/questions/1933451/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多