从远程子进程调用时,Python脚本中的路径不正确



我有两个脚本:main.py和worker.py

  • main.py位于主文件夹中
  • worker.py位于worker文件夹中
  • worker.py读取文件(parameters.txt(,该文件位于他的文件夹中名为data的子文件夹中

如果我执行worker.py,它只是读取parameters.txt文件,使用路径"data/parameters.txt"。它工作得很好。

如果我使用从主服务器调用worker.py

command = ['python', '../worker/worker.py']
subprocess.call(command)

我弄错了。

File "../main/main.py", line 11, in getTxt
input_file = open(file_name, 'r')
FileNotFoundError: [Errno 2] No such file or directory: '/data/parameters.txt'

我觉得当我从main.py调用子进程时,它并不是在创建py脚本的实例,就像我从worker文件夹执行"python worker.py"时一样,所以它混合了路径。例如,我觉得它不是在辅助文件夹中查找parameters.txt,而是在主文件夹中查找。

如何解决这个问题?了解我的worker.py是100%独立于main.py谈论变量和自变量。但需要从main.py 调用

这与导入或执行worker.py不同。我想同时执行多个worker.py,完成后它们会自动关闭。

非常感谢

子流程有一个cwd变量,您可以告诉它从哪里执行脚本。这就是我如何解决你的问题:

import subprocess
from os import getcwd, chdir
from os.path import join
CURRENT_DIR: str = getcwd()
chdir(CURRENT_DIR)
LOCATION = join(CURRENT_DIR, "worker")
command = ["python", "worker.py"]
subprocess.call(command, cwd=LOCATION)

worker.py-用于测试目的:

with open("parameters/test.txt") as f:
print(f.read())

结果:

hello!

这是test.txt中用于测试的内容。

您可能需要更改当前的工作目录

获取当前路径:

import os
current_path = os.getcwd()

更改当前工作目录

os.chdir('../worker')

运行您的流程:

command = ['python', 'worker.py']
subprocess.call(command)

最后回到你以前的路径

os.chdir(current_path)

相关内容

  • 没有找到相关文章

最新更新