假设我有两个 python 脚本 methods.py
和driver.py
。
methods.py
具有其中定义的所有方法,并且 driver.py
当我运行它时完成所需的工作。
假设我位于包含两个文件 driver.py
的主目录中和methods.py
,我有n
主目录中名为 subdir1
的子目录, subdir2
,..., subdirn
。所有这些子目录都有充当driver.py
的输入的文件。 .
我想做的是运行 driver.py
在所有这些子目录中并从中获取我的输出,而无需编写 driver.py
到磁盘。
我该怎么办? 目前,我正在使用 subprocess 模块
- 将 driver.py 和methods.py 复制到子目录中。
- 运行它们。
复制部分很简单:
import subprocess
for i in range(n):
cmd = "cp methods.py driver.py subdir"+str(i)
p = subprocess.Popen(cmd, shell=True)
p.wait()
#once every subdirectory has driver.py and methods.py, start running these codes
for i in range(n):
cmd = "cd subdir" + str(i) +" && python driver.py"
p = subprocess.Popen(cmd, shell=True)
p.wait()
有没有办法在不占用磁盘空间的情况下执行上述操作?
最佳答案
您可以使用 python os.chdir() 函数来更改当前工作目录:
import os
#import methods
root = os.getcwd()
for d in ['subdir1', 'subdir2']:
os.chdir(os.path.join(root, d))
print("dir:", os.getcwd())
exec(open("../driver.py").read())
我也不确定你是否需要 popen,因为 python 能够使用 exec 函数执行 python 文件。在这种情况下,这取决于您导入methods.py 的方式。您只是导入它还是在 driver.py 中以其他方式使用它?
您可以尝试将其导入主脚本的顶层或使用扩展路径,例如:
exec(open("../methods.py").read())
在您的驱动程序脚本内。请记住,这些解决方案都不是很优雅。最好的方法是按照 Gino Mempin 的建议处理 driver.py 内部的路径。您可以从那里调用 os.chdir()。
关于python - 如何在另一个目录中运行python脚本,而不将脚本写入磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65695408/