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

Incorrect path in Python Script when called from remote subprocess

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

如果我执行 worker.py,它只是使用路径 'data/parameters.txt' 读取 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,它们在完成后会自动关闭。

非常感谢

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

获取当前路径:

import os
current_path = os.getcwd()

更改当前工作目录

os.chdir('../worker')

运行您的进程:

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

终于回到原来的路

os.chdir(current_path)

subprocess 有一个 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测试的内容。