在Python中使用exec(open(file).read())运行的程序中止
在Python中,如果你使用exec(open(file).read())
这样的代码来运行程序,可能会遇到以下问题:
问题的原因:
- 实际上,你可能根本不应该使用exec
,因为它存在一些潜在的安全风险。
- exec
在同一个进程和线程中运行,没有办法在不杀死主程序的情况下退出它。
解决方法:
- 你应该在另一个进程、子进程或线程中打开它。
- 如果你的exec
运行的是Python代码,你可以简单地使用subprocess
模块中的Popen
方法:
from subprocess import Popen p = Popen(['python', filename'])
这样它就在后台运行,你的正常进程继续进行,你可以随时使用p.kill()
来终止它。
- 如果你想给该进程输入或读取其输出,可以参考这里了解如何读取输出。一个简单的例子是:
from subprocess import Popen, PIPE p = Popen(['python', filename], stdout=PIPE, stderr=PIPE) output, errors = p.communicate()
但是这种方法会等待进程完成其运行,如果你想实现异步获取输出,可以考虑在另一个线程中启动该进程,或者将输出写入日志文件。
总之,使用exec
运行程序可能会导致一些问题,可以考虑使用subprocess
模块的Popen
方法来解决这些问题。希望以上的解决方法对你有帮助。如果还有其他问题,可以参考给出的链接或者提出新的问题。