python - 如何在另一个目录中运行python脚本,而不将脚本写入磁盘?

标签 python terminal subprocess

假设我有两个 python 脚本 methods.pydriver.pymethods.py具有其中定义的所有方法,并且 driver.py当我运行它时完成所需的工作。

假设我位于包含两个文件 driver.py 的主目录中和methods.py ,我有n主目录中名为 subdir1 的子目录, subdir2 ,..., subdirn 。所有这些子目录都有充当driver.py的输入的文件。 .

我想做的是运行 driver.py在所有这些子目录中并从中获取我的输出,而无需编写 driver.py到磁盘

我该怎么办? 目前,我正在使用 subprocess 模块

  1. 将 driver.py 和methods.py 复制到子目录中。
  2. 运行它们。

复制部分很简单:

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/

相关文章:

linux - 如果我们在完成命令之前关闭终端怎么办?

python - 如何在python中使用子进程模块

rust - 三明治管使用rust 了怎么办?

python - 如何在 Python 中向量化这些嵌套循环?

python - 如何检查作者是否在 x 服务器中具有 x 角色?

macos - -bash : export: `=' : not a valid identifier

java - 如何从终端上的java文件创建tomcat应用程序

python - 命令在 CMD 中有效,但在子进程中无效

python - Pygame (Python) 缩放转换慢

Python:导入模块而不执行脚本