从其他路径调用python脚本并更改路径

时间:2019-05-02 17:04:40

标签: python linux shell

我有一个python脚本: my_script.py 我想从另一个目录中的另一个脚本 main.py 调用。

我正在这样做:

/home/path/to/my/main/script/main.py

import subprocess

def call_script():
    path_to_python = '/home/path/to/another/script/my_script.py'
    subprocess.call(["python", path_to_python])

/home/path/to/another/script/my_script.py

do_some_work('log_files/logs.log')

我收到以下错误:

File "/usr/lib/python3.5/logging/__init__.py", line 1037, in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
FileNotFoundError: [Errno 2] No such file or directory: '/home/path/to/my/main/script/log_files/logs.log'

我看到被调用的脚本正在使用原始脚本位置中的路径作为其基本路径。
如何获得 my_script.py 来使用其自己的路径? 我不想打开新的外壳。

2 个答案:

答案 0 :(得分:1)

os.chdir()内做一个my_script.py

从父进程继承的

CWD(当前工作目录)。因此,由于您是从主脚本的位置运行脚本,因此子进程的CWD仍设置为/path/to/main.py

如果您执行os.chdir('/path/to/my_script.py'),则CWD将更改为my_script.py的目录。

或者,等效地,您也可以在脚本中使用日志文件的绝对路径。

答案 1 :(得分:1)

使用cwd函数参数:

path_to_python = '/home/path/to/another/script/my_script.py'
subprocess.call("python", cwd=path_to_python)

有关docs的更多信息。