从远程子进程调用时 Python 脚本中的路径不正确
Incorrect path in Python Script when called from remote subprocess
我有两个脚本:main.py 和 worker.py
- main.py 位于主文件夹中。
- worker.py 位于工作文件夹中。
- worker.py 读取文件 (parameters.txt),该文件位于他的文件夹中,位于名为 data 的子文件夹中。
如果我执行 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测试的内容。
我有两个脚本:main.py 和 worker.py
- main.py 位于主文件夹中。
- worker.py 位于工作文件夹中。
- worker.py 读取文件 (parameters.txt),该文件位于他的文件夹中,位于名为 data 的子文件夹中。
如果我执行 worker.py,它只是使用路径 'data/parameters.txt' 读取 parameters.txt 文件。效果很好。
如果我使用
从主调用 worker.pycommand = ['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测试的内容。