我有两个脚本: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)